先声明一下,我的脚本不是太好,供参考
首先IFS不是awk的内置变量, 而是shell内置变量
另外awk内部的变量和awk外部语句的变量是两套机制,也就是说假设有个变量a=1,你使用awk '{print a}' 并不会输出1 //当然我的awk语句写的不完整,只是为了表达意思
你想要在awk中使用外部变量,要使用-v参数或是在最后追加参数的方式将想要使用的变量导到awk空间中, 才能使用,也就是说:
awk -v var="$a" '{print var}' 文件名 //此时你可以使用变量var间接输出变量a的值
或者写为:
awk '{print var}' var="$a"文件名
====
写在最后: 因为我的脚本不太好,所以调试信息也看不大明白,不过感觉应该不难,题主可以举一个简单具体一点的例子说明一下你想执行哪条语句,输出什么结果,我帮你看一下
实现的方法如下:
1、第一步,打开命令控制台以找到要编辑的文件,执行命令ls来查看下面的一些文件,在下面有一个indexphp文件,如下图所示。
2、其次,完成上述步骤后,执行命令vi
indexphp,如下图所示。
3、接着,完成上述步骤后,如果要修改此文件的内容,请按键盘上的“
i”键,底部将变为INSERT,就可以对其进行修改,如下图所示。
4、然后,写echo的代码保存 Esc+:+wq,这是保存,按Enter键保存,如下图所示。
5、随后,完成上述步骤后,再次打开文件,将发现刚刚编写的代码已保存在其中,如下图所示。
6、最后,不保存命令是Esc+:+q!,可以灵活运用这些命令。可以使用上述步骤在Linux终端中使用命令来编辑和保存文件,如下图所示。这样,问题就解决了。
!#/bin/awk -fBEGIN{
print "下面是文件对列的统计";
}
{
for(i=1;i<=NF;i++)
++a[i][$i];
}
END{
for(i=1;i<=NF;i++)
{
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
比如你的testtxt和script文件都放在同一个文件夹/home/ha,那这个命令就是
gawk -F"," -f /home/ha/script /home/ha/testtxt
或者你也可以单敲一行命令
gawk -F"," 'BEGIN{ print "开始输出对列的统计"; } { for(i=1;i<=NF;i++) ++a[i][$i]; } END { for(i=1;i<=NF;i++) { printf("第%s列",i); for(j in a[i]) printf("\t%s,%s次",j,a[i][j]); print ""; } print "输出完毕"; }' testtxt
都是一样的,testtxt是你要统计的文件
这下面你的文件产生的输出
开始输出对列的统计
第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不一定。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)