如何在使用awk时在字符串变量中转义@

时间:2018-04-02 04:38:53

标签: shell awk

$a = 262145_73236692@10.54.87.31    
awk -F',' '$2 == $a {print $1}' file.csv

这是我的命令。 它在'@'显示语法错误它无效,因为我的字符串中有'@'字符.. 我如何使它工作,以便它完全匹配我的字符串,包括特殊字符。 $ a是一个循环变量,它通过一个字符串数组进行迭代并将其与文件file.csv匹配

3 个答案:

答案 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)

我能够通过使用双引号解决我的问题。