2010-10-05 73 views
1

我有這樣的文件,其中包含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 

回答

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

0

使用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

1

較短方式

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

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

+2

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