如果其他列匹配,则删除awk字段

时间:2016-01-11 23:50:49

标签: csv vim awk

我有一个如下所示的CSV文件:

col1,col2,col3,col4
1,2,a,01/01
2,3,b,01/02
3,4,5,c,01/03
2,5,6,c,01/03

最后2行已附加到文件中,但它有一个额外的列(第三列)。我想从最后两行删除第三列(即第4列==“c”和第5列==“01/03”)

我想要的输出是从最后2行中删除第三列,使其只有4列:

col1,col2,col3,col4
1,2,a,01/01
2,3,b,01/02
3,4,c,01/03
2,5,c,01/03

如果可以在vim中完成,也会很好

3 个答案:

答案 0 :(得分:3)

这是一种稍微不同的方法,可避免必须输入要包含的列列表:

awk -F, 'BEGIN {OFS=FS} NF==5 {for(i=3;i<=NF;i++){$i=$(i+1)}; NF--} 1' 

具有明确列列表的解决方案也可以更紧凑地编写如下:

awk -F, 'BEGIN {OFS=FS} NF == 5 {print $1, $2, $4, $5; next} 1'

答案 1 :(得分:1)

这应该这样做

awk -F, 'BEGIN {OFS=","} {if (NF == 5) {print $1, $2, $4, $5} else {print}}' filename

答案 2 :(得分:1)

$ awk 'BEGIN{FS=OFS=","} {print $1,$2,$(NF-1),$NF}' file
col1,col2,col3,col4
1,2,a,01/01
2,3,b,01/02
3,4,c,01/03
2,5,c,01/03