$a = 262145_73236692@10.54.87.31
awk -F',' '$2 == $a {print $1}' file.csv
这是我的命令。 它在'@'显示语法错误它无效,因为我的字符串中有'@'字符.. 我如何使它工作,以便它完全匹配我的字符串,包括特殊字符。 $ a是一个循环变量,它通过一个字符串数组进行迭代并将其与文件file.csv匹配
答案 0 :(得分:0)
我想在@符号起作用之前使用反斜杠\。
答案 1 :(得分:0)
我认为,你不能在AWK程序中使用bash变量。
为了证明这一点,您可以运行下一个命令:
export a="262145_73236692@10.54.87.31"
awk -v A=$a 'BEGIN {print "bash: " $a; print "awk: " A}' file.csv
如果你的输出是:
bash:
awk: 262145_73236692@10.54.87.31
- 它显示$ a在AWK中有空值。 (如果你考虑一下运算符$
在AWK中的作用,这是可以理解的。)
因此,正确的解决方案是:
export a="262145_73236692@10.54.87.31"
awk -v A=$a -F',' '$2 == A {print $1}' file.csv
或更简单:
awk -v A="262145_73236692@10.54.87.31" -F',' '$2 == A {print $1}' file.csv
答案 2 :(得分:0)
我能够通过使用双引号解决我的问题。