如何在文件中添加新列

问题描述:

我有这样的文件,其中包含5列。但是,我的文件中的某些行有4列错误,例如在第5行和第6行的文件中,可以看到第二列丢失。我想用空格替换丢失的第二列而不干扰文件中带字段分隔符“,”的其他行。如何在文件中添加新列

 
11111,5323,6296,29-May-2010,1 
22222,5323,6296,24-May-2010,1 
33333,5323,6296,24-Jun-2010,1 
44444,5323,6296,24-Jun-2010,1 
55555,8061,15-Jul-2010,1 
66666,6296,29-May-2010,1 
77777,5323,6296,29-May-2010,1 
88888,6296,29-May-2010,1 
99999,6296,27-May-2010,1 
10101,5323,6296,29-May-2010,1 

输出,我需要。

 
11111,5323,6296,29-May-2010,1 
22222,5323,6296,24-May-2010,1 
33333,5323,6296,24-Jun-2010,1 
44444,5323,6296,24-Jun-2010,1 
55555,,8061,15-Jul-2010,1 
66666,,6296,29-May-2010,1 
77777,5323,6296,29-May-2010,1 
88888,,6296,29-May-2010,1 
99999,,6296,27-May-2010,1 
10101,5323,6296,29-May-2010,1 

BEGIN{ 
    FS="," 
} 

NF==5 { print; } 
NF==4 { printf("%s,,%s,%s,%s\n", $1, $2, $3, $4); } 
+0

感谢伯努瓦..它的伟大工程.. – gyrous 2010-10-05 10:48:53

使用Vim我进入在实施例模式以下行: :%S/^(\ d +),(\ d +,\ d + - \ W + - \ d +,\ d )$/\ 1 \ 2/g的

+0

可能是一个很好的解决方案,提供所有行按照这个格式。但是你必须指定\ v(verymagic)来使魔法运作(因为圆括号和+应该以其他方式逃脱) – Benoit 2010-10-05 10:52:02

+0

啊,对 - 我明白了。 – 2010-10-05 10:59:58

较短方式

awk -F"," 'NF<5{sub(",",",,")}1' file 
+0

“-F”,“'是不必要的。 – 2010-10-05 14:38:32

+2

@丹尼斯:它是计算'NF'所必需的。 – schot 2010-10-05 14:46:06