Вероятно, временная часть линии наиболее стабильна, если вас интересуют другие часовые пояса. Вероятно, тогда также будет небезопасно искать имена месяцев и дней.
РЕДАКТИРОВАТЬ :сделал шаблон немного более точным, чтобы не совпадать с частями 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 цифр.
Вы должны иметь возможность избежать этого, используя опцию --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) }
}
'
Проверено, работает нормально
#!/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
~
~