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

Jam*_*ond 9 bash shell awk

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

awk行看起来像:

cat input.csv | awk -F, '$1~/$1/ {print "is good"}'
Run Code Online (Sandbox Code Playgroud)

第一$1是输入CSV的第一列,第二个$1被认为是这个外壳脚本的第一命令行输入

我试图把\第二个放在前面$,但它似乎无法正常工作.

有人可以帮忙吗?

Adr*_*onk 5

cat input.csv | awk -F, '$1~/'"$1"'/ {print "is good"}'
Run Code Online (Sandbox Code Playgroud)

您需要关闭'字符串,插入shell $1(内部"以防有特殊字符),然后重新打开'字符串.

您可能想要检查$1来自shell的/字符是否包含会扰乱正则表达式的字符.

正如@Ignacio Vazquez-Abrams所说,你不需要输出cat到awk 的输出,你可以awk直接读取文件.那是:

cat input.csv | awk ...
Run Code Online (Sandbox Code Playgroud)

可以简化为:

awk ... < input.csv
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

变量也很好。

awk -F, -v needle="$1" '$1 ~ needle {print "is good"}' < input.csv
Run Code Online (Sandbox Code Playgroud)

  • 每个角色都有其独特的方式。 (5认同)