awk的$ 1与shell脚本中的$ 1冲突

时间:2012-03-04 08:03:20

标签: bash shell awk

我正在写一个shell脚本,其中包含几行awk

awk行看起来像:

cat input.csv | awk -F, '$1~/$1/ {print "is good"}'

第一个$1是输入csv的第一列,第二个$1应该是此shell脚本的第一个命令行输入

我试图将\放在第二个$前面,但似乎无效。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

cat input.csv | awk -F, '$1~/'"$1"'/ {print "is good"}'

您需要关闭'字符串,插入shell $1(如果有特殊字符,请在"内),然后重新打开'字符串。

您可能想要检查shell中的$1是否包含/个字符 打乱正则表达式。

正如@Ignacio Vazquez-Abrams指出的那样,你不需要将cat的输出传递给awk,你可以让awk直接读取文件。那就是:

cat input.csv | awk ...

可以简化为:

awk ... < input.csv

答案 1 :(得分:4)

变量也很好。

awk -F, -v needle="$1" '$1 ~ needle {print "is good"}' < input.csv

答案 2 :(得分:1)

不需要cat或重定向。以下是使用反斜杠的第三个变体:

awk -F, "\$1~/$1/ {print \"is good\"}" input.csv