как создать отчет, используя массив и рег в awk - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь обернуть голову вокруг создания отчета на основе этих данных

(просто образец файла input.txt)

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 appInsights-nodeAIF-44c3af9-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
-rw-------  1 mce237 students     199 2020-03-01 20:08:55 .build4503681510908034369.log
-rw-------  1 ce237 students     199 2020-03-01 18:18:44 .build4964061885086964943.log

Это вывод, к которому я стремлюсь

user: mjy610
dirs: 3

user: hrb980
files:
  all/hidden: ( 195 / 2 )
dirs: 3
file storage: 76235 B

user: pdq039
dirs: 3

user: zqu051
files:
  all/hidden: ( 452 / 0 )
file storage: 652583 B

user: mce237
files:
  all/hidden: ( 52 / 12 )
dirs: 4
file storage: 2729344 B

user: dad980
files:
  all/hidden: ( 4 / 1 )
dirs: 3
file storage: 6614 B

Теперь это код, который у меня есть до сих пор

#!/usr/bin/awk -f

    $1 ~ /^-/ && $8 ~ /^./ {totalFiles+=1;}
    $8 ~ /^\.[[:alpha:]]{3,}../ {totalHidenFiles+=1;}
    $1 ~ /^d/ {totalDirectories+=1;}
    $1 ~ /^srw/ {totalOtherFiles+=1}
    FNR > 1 {users[$3] }

{
    totalStorage+=$5
    #userFiles[$3]=$1

}
END {
    for (u in users) {totalUsers++;
    print u}

    print "\nTotal Users: ", totalUsers
    print "Total Files: "
    print "\tall/hidden: " "(", totalFiles " / ", totalHidenFiles ")"
    print "Total Directories: ", totalDirectories
    print "Total Storage: "totalStorage " b"
    print "Total Other Files: ", totalOtherFiles

}

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

totalUserFiles[$3]+=$1

, а затем регулярное выражение, используя то же выражение сверху в моем коде, но только для указанного пользователя c. некоторые рекомендации о том, как это сделать, было бы хорошо. Любой совет, если мой подход к этому хорош или нет.

Я бы предположил, что приращения будут в блоках END, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...