awk / sed在条件上添加一列

时间:2016-11-29 12:37:44

标签: shell awk sed

我有一个包含9列的csv文件。某些行缺少第4列和第5行,这意味着这些行只有7列。我正面临使用此文件的问题,因为它是其他一些应用程序。

有没有办法可以为有7列的行添加空列4和5。

共有1960行,120行有7列。

我试过了:

awk -F , 'NF==7' file1.csv

提取包含7列的行,但不知道如何将其作为条件检查,并在这些行的中间添加2个空列。

1 个答案:

答案 0 :(得分:1)

首先缺少OP忘记发布的测试材料:

$ cat > foo
1,2,3,4,5,6,7,8,9
1,2,3,6,7,8,9

然后,在awk中:

$ awk 'BEGIN { FS=OFS="," } 
       NF==7 { for(i=NF;i>=4;i--) $(i+2)=$i } 
# was: NF==7 { nf=NF; for(i=nf;i>=4;i--) $(i+2)=$i } 
       1' foo
1,2,3,4,5,6,7,8,9
1,2,3,6,7,6,7,8,9

请注意,原始$4$5具有原始值。可以通过将$(i+2)=$i更改为{ $(i+2)=$i; $i="" }来改变这种情况。