假设我有多个列可能包含我想要选择的表达式,如果它们匹配或不匹配。我如何编写awk表达式?
以下示例仅在某些字段匹配时才打印列:
awk -v OFS=$'\t' -F $'t\' '($12 ~ /9\..[^b-z]/) || ($4 !~ /QA_[tT][eE][sS][tT]/) || ($4 !~ /ACC_Operator1/) || ($5 !~ /4CPP/) { print $8, $5, $4, $10, $6, $12}' filename
运行这个给我一个
-bash: !~: event not found
我假设使用的是bash问题!
答案 0 :(得分:4)
你有一个拼写错误,由语法荧光笔显示:
awk -v OFS=$'\t' -F $'t\' ...
^ escaped single quote
这意味着awk命令的开头引号实际上是关闭了之前的单引号。
请注意,awk会理解\t
,因此您可以使用-v OFS='\t'
,而不是使用$'\t'
。