Arrays 在awk中,当数组遇到新字符串时,如何增加数组索引?
我正在尝试解析ls输出(我知道这是不受欢迎的,但我需要为一个分配进行解析。)我需要计算每个用户的目录数,并在他们的用户名下打印出来 我有一个for循环来打印用户名/目录数:Arrays 在awk中,当数组遇到新字符串时,如何增加数组索引?,arrays,loops,awk,Arrays,Loops,Awk,我正在尝试解析ls输出(我知道这是不受欢迎的,但我需要为一个分配进行解析。)我需要计算每个用户的目录数,并在他们的用户名下打印出来 我有一个for循环来打印用户名/目录数: for (users in uid){ x++ totalUsers++; printf("User: %s\n", users); if(dirs[x]>0) printf(" dirs: %s\n", dirs[x]); }
for (users in uid){
x++
totalUsers++;
printf("User: %s\n", users);
if(dirs[x]>0)
printf(" dirs: %s\n", dirs[x]);
}
我试过这个:
if(dirs[x] < $2) {
dirs[x]=$2
x++
}
由此:
-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 mce237 students 199 2020-03-01 18:18:44 .build4964061885086964943.log
-rw------- 1 mce237 students 199 2020-03-01 20:17:13 .build5474334865226720725.log
-rw------- 1 mce237 students 199 2020-03-01 19:08:39 .build6322670020019345604.log
-rw------- 1 mce237 students 420 2020-03-01 20:08:08 .build8057453026527719771.log
您可以为
用户上的所有内容编制索引($3
),然后为需要跟踪的每个数量保留单独的数组。您可以检查第一个字段中的第一个字符是否为'd'
,以确定文件是否为目录,还可以检查文件名中的第一个字符是否为'。
以确定文件是否隐藏(是否要为用户计算每个目录的总数取决于您自己——如果不是,则添加否则
)
要跟踪每个数量,然后在END
规则中输出,可以执行以下类似操作:
ls -youroptions | awk '{
user[$3]++
storage[$3]+=$5
if ($1 ~ /^d/)
dir[$3]++
if ($8 ~ /^[.]/)
hidden[$3]++
}
END {
for (i in user)
printf "user: %s\nfiles:\n(all/hidden): (%d/%d)\ndirs: %d\nstorage: %ld\n",
i,user[i],hidden[i],dirs[i],storage[i]
}'
(注意:在解析ls
时,您可能需要添加NR>1{…}
以避免将的“total”
行打印为第1行,并且不同的选项和区域设置可能会产生与您显示的不同的字段顺序)
示例输出
使用提供的列表作为输入(假设ls
output的每一行之间没有空行),将生成以下输出:
user: mce237
files:
(all/hidden): (8/8)
dirs: 0
storage: 1813
这将向您展示一种处理单独数组中不同计数的方法,所有这些计数都通过使用公共字段作为索引进行同步 为什么不用户[$3]+
?还有if($8~/^[.]/){hidden[$3]+
等等?非常感谢!这正是我完成这项工作所需要的突破。:)很高兴它有所帮助。awk
是瑞士军刀,适用于所有东西的文本,一旦你与它处理一条记录(行)的事实成为朋友一次,您可以编写任意多的规则来处理每一行-这实际上只是每个规则中的普通编程:)
祝您的脚本编写顺利!
user: mce237
files:
(all/hidden): (8/8)
dirs: 0
storage: 1813