加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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的输出通常是一个坏主意.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读