使用awk比较相同文件的列

时间:2013-09-10 07:53:20

标签: unix awk

如果第一列为零,我想打印文件中的第三列,直到第六列。

文件:

col1 col2 col3 col4 col5 col6
0     X2   X3    X4   X5   X6
D1    D2   D3    D4   D5   D6 
Y1    Y2   Y3    Y4   Y5   Y6
0     A2   A3    A4   A5   A6

我试过这段代码:

awk '$1==0{key=$0;if(prev!=key){print saved};prev=key;saved=$0}END{print saved}'

,结果输出为:

0     X2   X3    X4   X5   X6
0     A2   A3    A4   A5   A6

但我期待的输出是:

X3    X4   X5   X6
A3    A4   A5   A6

1 个答案:

答案 0 :(得分:2)

这样可以解决问题:

$ awk '$1==0{print $3,$4,$5,$6}' OFS='\t' file
X3      X4      X5      X6
A3      A4      A5      A6

可扩展的解决方案,从第三列打印到最后一列:

$ awk '$1==0{for(i=3;i<=NF;i++)printf "%s",$i(i==NF?ORS:OFS)}' OFS='\t' file
X3      X4      X5      X6
A3      A4      A5      A6

如果您不想在最后一列(n = 5)之前打印,则为参数化版本:

$ awk '$1==0{for(i=3;i<=n;i++)printf "%s",$i(i==n?ORS:OFS)}' OFS='\t' n=5 file
X3      X4      X5
A3      A4      A5