file – 如何将bash参数传递给awk脚本?
发布时间:2020-12-15 21:14:52 所属栏目:安全 来源:网络整理
导读:我有awk文件: #!/bin/awk -fBEGIN {}{ filetime[$'$colnumber']++;}END { for (i in filetime) { print filetime[i],i; }} 和bash脚本: #!/bin/bashvar1=$1awk -f myawk.awk 当我跑: ls -la | ./countPar.sh 5 我收到错误: ls -la | ./countPar.sh 5awk:
我有awk文件:
#!/bin/awk -f BEGIN { } { filetime[$'$colnumber']++; } END { for (i in filetime) { print filetime[i],i; } } 和bash脚本: #!/bin/bash var1=$1 awk -f myawk.awk 当我跑: ls -la | ./countPar.sh 5 我收到错误: ls -la | ./countPar.sh 5 awk: myawk.awk:6: filetime[$'$colnumber']++; awk: myawk.awk:6: ^ invalid char ''' in expression 为什么? $colnumber必须替换为5,因此awk应该读取ls输出的第5列. 解决方法
您可以直接从命令行将变量传递给awk脚本.
改变这一行: filetime[$'$colnumber']++; 至: filetime[colnumber]++; 并运行: ls -al | awk -f ./myawk.awk -v colnumber=5 如果你真的想使用bash包装器: #!/bin/bash var1=$1 awk -f myawk.awk colnumber=$var1 (与上面的脚本相同的更改.) 如果要使用环境变量,请使用: #!/bin/bash export var1=$1 awk -f myawk.awk 和: filetime[ENVIRON["var1"]]++; (我真的不明白你的awk脚本的目的是什么.最后一部分可以简化为: END { print filetime[colnumber],colnumber; } 解析ls的输出通常是一个坏主意.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |