Bash 在awk中打印一列(如果匹配),如果不匹配,则仍打印该行(不带该列)

Bash 在awk中打印一列(如果匹配),如果不匹配,则仍打印该行(不带该列),bash,shell,awk,Bash,Shell,Awk,我试图用awk做一些过滤,但我目前遇到了一个问题。我可以让awk匹配正则表达式,并用列打印行,但我不能让它在没有列的情况下打印行 awk-vofs='\t'$6~/^07/{print$3、$4、$5、$6}文件 这就是我现在拥有的。如果与正则表达式不匹配,我可以让awk打印没有第六列的行吗 如果正则表达式不匹配,则将$6设置为空字符串。就这么简单。这应该做到: awk -v OFS='\t' '{ if ($6 ~ /^07/) { print $3, $4, $5, $6 } else {

我试图用awk做一些过滤,但我目前遇到了一个问题。我可以让awk匹配正则表达式,并用列打印行,但我不能让它在没有列的情况下打印行

awk-vofs='\t'$6~/^07/{print$3、$4、$5、$6}文件


这就是我现在拥有的。如果与正则表达式不匹配,我可以让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

不知道为什么我没有想到使用if语句。谢谢:)