gpt4 book ai didi

file - 如何将 bash 参数传递给 awk 脚本?

转载 作者:行者123 更新时间:2023-11-29 09:10:41 25 4
gpt4 key购买 nike

我有 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 的输出通常不是一个好主意。)

关于file - 如何将 bash 参数传递给 awk 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8561471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com