shell脚本中awk命令内置参数与脚本参数冲突,如何使用内置参数?

shell脚本中awk命令内置参数与脚本参数冲突,如何使用内置参数?,第1张

题主你好,
先声明一下,我的脚本不是太好,供参考
首先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 -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 "输出完毕";
}

将这个文件保存成一个文本文件,我这里举例文件名叫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不一定。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12603068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存