如果是这样,建议:
1、首先局部变量不可以长期保存,也就是说有存活期
比如:countNum=2
如果你长时间不运行再去运行的话,想让输出3,但这时候countNum可能已经恢复成0了
所以楼上正解,保存到一个文件中
其次,可以生命为全局变量。即 export countNum=2
这样的方法,保证执行次数正确无误
2、其次如果不是一个大的脚本的小细节的话,这样的脚本没有任务意义~
纯手打,请采纳~
!#/bin/awk -fBEGIN{
print "下面是文件对列的统计"
}
{
for(i=1i<=NFi++)
++a[i][$i]
}
END{
for(i=1i<=NFi++)
{
printf("第%s列",i)
for(j in a[i]) printf("\t%s,%s次",j,a[i][j])
print "";
}
print "输出完毕"
}
将这个文件保存成一个文本文件,我这里举例文件名叫script,你要改成什么都可以
然后在命令行里敲
gawk -F"," -f /path/to/script /path/to/your/txt/file
比如你的test.txt和script文件都放在同一个文件夹/home/ha,那这个命令就是
gawk -F"," -f /home/ha/script /home/ha/test.txt
或者你也可以单敲一行命令
gawk -F"," 'BEGIN{ print "开始输出对列的统计"} { for(i=1i<=NFi++) ++a[i][$i]} END { for(i=1i<=NFi++) { printf("第%s列",i)for(j in a[i]) printf("\t%s,%s次",j,a[i][j])print ""} print "输出完毕"}' test.txt
都是一样的,test.txt是你要统计的文件
这下面你的文件产生的输出
开始输出对列的统计
第1列 1,5次 10,1次
第2列 2,4次 20,2次
第3列 3,5次 30,1次
第4列 4,6次
第5列 5,5次 50,1次
第6列 6,3次 60,3次
输出完毕
awk有很多很多版本,这个脚本用gawk是可以的,其他的awk不一定。
每种SHELL的用户个数:awk -F":" '{print $7}' /etc/passwd | uniq -c
第2个问题思路:
另外一个需要用for去读passwd的每一行,用awk去取出每行的第一个字段(用户名)赋值给一个变量,取第7个字段(SHELL)赋值给另外一个变量;接下来就判断第7个字段(shell)是否为空,如果为空就输出第一个字段(即用户名)。
太晚了,有时间再把脚本补上来。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)