awk if 命令仅适用于打印第 19 列,但我如何让它打印两列?

awk if 命令仅适用于打印第 19 列,但我如何让它打印两列?

我想打印第 3 列和第 4 列,但不打印标题空列行。

header
tap
norm 
X Y       880 1787
X Y       3253 3439

通过打印此awk '{print($3,$4)}'给出

(BLANK lines from header rows)
880 1787
3253 3439

这仅适用于打印第 19 列,但我如何让它打印两列?

awk  '$3{print $3}' 
880
3253

我想要 col3 col4

880 1787
3253 3439

我尝试过,但只打印了第 3 列

awk '$3{print $3}''$4{print $4}' 
880
1787
3253
3439

答案1

你知道头有多长(三行):

awk 'NR > 3 { print $3, $4 }'

NR是迄今为止已读取的记录数(默认为行数)。我们NR > 3触发print第四行及其后所有行的语句。

可以使用

awk '$3 { print $3, $4 }'

但这有点脆弱,因为它不仅取决于它$3是否存在,而且还取决于它是否非零(第三列中的零将不会为该行提供任何输出)。

答案2

如果

header
tap
norm
X Y 880 1787
X Y 3253 3439

然后

awk '{print $3 " " $4}' | sed '/^ *$/d'

使

880 1787
3253 3439

对于你的最后一部分,你可以尝试

 awk '{print $3 " " $4 " " $19}'

打印第 3、4 和 19 列。

相关内容