【发布时间】:2015-10-06 19:47:55
【问题描述】:
我正在尝试使用 awk 进行一些过滤,但我目前遇到了问题。我可以让 awk 匹配一个正则表达式并打印带有列的行,但我不能让它打印没有列的行。
awk -v OFS='\t' '$6 ~ /^07/ {print $3, $4, $5, $6}' file
目前是我所拥有的。如果它与正则表达式不匹配,我可以让 awk 打印没有第六列的行吗?
【问题讨论】:
我正在尝试使用 awk 进行一些过滤,但我目前遇到了问题。我可以让 awk 匹配一个正则表达式并打印带有列的行,但我不能让它打印没有列的行。
awk -v OFS='\t' '$6 ~ /^07/ {print $3, $4, $5, $6}' file
目前是我所拥有的。如果它与正则表达式不匹配,我可以让 awk 打印没有第六列的行吗?
【问题讨论】:
如果正则表达式不匹配,请将$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
【讨论】: