Применение numfmt к определенному столбцу в awk

Вероятно, временная часть линии наиболее стабильна, если вас интересуют другие часовые пояса. Вероятно, тогда также будет небезопасно искать имена месяцев и дней.

РЕДАКТИРОВАТЬ :сделал шаблон немного более точным, чтобы не совпадать с частями IP-адресов и тому подобное (шаблон может не совпадать до и после цифры или двоеточия ).

Итак, если вы попытаетесь найти время, вы можете сделать:

grep "\([^[^0-9:]\|^\)[0-9]\{1,2\}\(:[0-9]\{2\}\)\{2\}\([^[^0-9:]\|$\)"

С некоторыми тестовыми данными, как указано выше:

grep " ([^[^0 -9 :]\|^ )[0 -9]{1,2} (:[0 -9]{ 2} ){2} ([^[^0 -9 :]\|$ )" << КОНЕЦ Вс 14 июля 12 :47 :49 UTC 2019 какое-то сообщение адрес был 01 :11 :91 :05 Вс 14 июля 12 :47 :49 UTC 2019 01 :11 :91 :05 был адрес это не правильное время 123 :23 :03 это тоже не 1 :3 :43 и ни его 12 :33 :27 :Вс 14 июля 12 :47 :49 UTC 2019 КОНЕЦ

выводит:

Sun Jul 14 12:47:49 UTC 2019
Sun Jul 14 12:47:49 UTC 2019
Sun Jul 14 12:47:49 UTC 2019

Требуются три числовые части, разделенные символом :, первая может состоять из 1 -2 цифр, а две другие должны состоять из 2 цифр.

0
20.05.2021, 14:24
2 ответа

Вы должны иметь возможность избежать этого, используя опцию --fieldв numfmt, чтобы ограничить форматирование только вторым полем напрямую, т.е.

find. -printf "%u  %s\n" | 
  awk '{user[$1]+=$2}; END{ for(i in user) print i, user[i]}' | 
  numfmt --field=2 --to=iec-i --suffix=B --padding=7

Если вам действительно нужно применить numfmtкак конкретное значение из awk, то вот вариант, который работает для простых случаев и не требуетgetline var:

find. -printf "%u  %s\n" | 
  awk '
    {user[$1]+=$2}
    END {
      cmd = "numfmt --to=iec-i --suffix=B --padding=7"; 
      for(i in user){ printf "%s ", i; print user[i] | cmd; close(cmd) } 
    }
  '
1
28.07.2021, 11:30

Проверено, работает нормально

#!/usr/bin/python
import os
import subprocess
from os import *
users=[]
for i,j,k in os.walk('<directory>'):
    for m in  k:
        fil=str(i)+str(m)
        if os.path.isfile(fil):
            if os.stat(fil).st_uid not in users:
                users.append(os.stat(fil).st_uid)



for u in users:
    size=0
    for i,j,k in os.walk('<Directory>'):
        for z in k:
            fil=str(i)+str(z)
            if os.path.isfile(fil):
                if (os.stat(fil).st_uid == u):
                    size=os.stat(fil).st_size+size
    cmd1="getent passwd {0}".format(u)
    ou1=subprocess.Popen(cmd1,stdout=subprocess.PIPE,shell=True).communicate()[0].strip().split(':')[0]
    print size,ou1
~                                                                                                                                             
~                    
0
28.07.2021, 11:30

Теги

Похожие вопросы