Я неправильно использую регулярные выражения в awk? Я не могу понять, почему это не работает внутри файла .awk.
Я ввожу это, например, как один вкладыш, чтобы подсчитать
cat input.txt | awk '$1 ~ /^-/ && $8 ~ /^./ {totalFiles+=1;} END {print totalFiles}'
И все же это возвращает правильные результаты.
this is the returned value for files in the one liner
Files: 708
вот ввод, который я положил для файла awk
test2.awk input.txt
, и то, что я пытаюсь получить, выглядит примерно так
total users: 13
total files
all/hidden: ( 708 / 16 )
total dirs: 38
total other: 11
file storage: 3472081 B
Но когда я запускаю это, регулярное выражение не работает, и он считает каждую строку один раз, возвращая количество строк, а это не то, что я хотел бы.
#!/usr/bin/awk -f
BEGIN {
totalFileRegex = "/^-/ && $8 ~ /^./"
NR>1
}
#Body
{
users[$3]
totalStorage+=$5
$1 ~ totalFileRegex
totalFiles+=1
$8 ~ /^\.[[:alpha:]]/ totalHidenFiles++
$1 ~ /^d/ totalDirectories++
$1 ~ /^srw/ totalOtherFiles++
}
END {
for (u in users) {totalUsers++}
# print each user's data
# print each username
# print each users dir count
# print each users hidden file count
print totalUsers
print totalDirectories
print totalFiles
print totalHidenFiles
print totalStorage
print totalOtherFiles
}
Вот вывод
2 # total users
6 # wrong
6 # wrong
6 # wrong
70771 # total storage
6 # wrong
Вот вход, с которым я работаю
total 17160
drwxrwxrwt 98 root root 528384 2020-04-07 13:38:14 .
drwxr-xr-x 26 root root 4096 2018-09-04 10:50:29 ..
drwx------ 2 pmp099 students 4096 2020-03-03 20:57:31 appInsightsnodeAIF-444c3af9-8e69-4462-ab49-4191e6ad1916
-rw------- 1 mce237 students 199 2020-03-01 18:41:59 .build1276786824731864129.log
-rw------- 1 mce237 students 199 2020-03-01 20:18:42 .build291177188595028335.log
-rw------- 1 mce237 students 199 2020-03-01 20:10:44 .build4195866878600813549.log