我正在写一个shell脚本,其中包含几行awk
awk行看起来像:
cat input.csv | awk -F, '$1~/$1/ {print "is good"}'
第一个$1
是输入csv的第一列,第二个$1
应该是此shell脚本的第一个命令行输入
我试图将\
放在第二个$
前面,但似乎无效。
有人可以帮忙吗?
答案 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