如果匹配则在awk中打​​印一列,如果不匹配则打印该行(没有该列)

时间:2015-10-06 11:31:18

标签: bash shell awk

我尝试使用awk进行一些过滤,但我目前遇到了一个问题。我可以使awk与正则表达式匹配并使用列打印该行,但是我无法在没有列的情况下打印该行。

awk -v OFS='\t' '$6 ~ /^07/ {print $3, $4, $5, $6}' file

目前我拥有的是什么。如果它与正则表达式不匹配,我可以使用awk打印没有第六列的行吗?

1 个答案:

答案 0 :(得分:3)

如果正则表达式不匹配,请将$6设置为空字符串。就如此容易。这应该这样做:

awk -v OFS='\t' '{ if ($6 ~ /^07/) { print $3, $4, $5, $6 } else { $6 = ""; print $0; } }' file

请注意,$0是整行,包括$2(您似乎没有使用)。它将打印除第6列以外的每一列。

如果您只是想在没有匹配项时打印$3$4$5,请改用它:

awk -v OFS='\t' '{ if ($6 ~ /^07/) print $3, $4, $5, $6; else print $3, $4, $5 }' file
相关问题