Unit testing 如何在文件中添加新列

Unit testing 如何在文件中添加新列,unit-testing,unix,awk,grep,Unit Testing,Unix,Awk,Grep,我有这样的文件,其中包含5列。但是我的文件中的某些行错误地有4列,例如在这个文件的第5行和第6行,您可以看到第二列丢失了。我想用一个空格替换缺少的第2列,而不使用字段分隔符“,”干扰文件中的其他行 11111 53236296,29-May-2010,1 222253236296,2010年5月24日,1 3333353236296,24-Jun-2010,1 44444 53236296,24-Jun-2010,1 55555 8061,2010年7月15日,1 6666296,29-May-

我有这样的文件,其中包含5列。但是我的文件中的某些行错误地有4列,例如在这个文件的第5行和第6行,您可以看到第二列丢失了。我想用一个空格替换缺少的第2列,而不使用字段分隔符“,”干扰文件中的其他行

11111 53236296,29-May-2010,1 222253236296,2010年5月24日,1 3333353236296,24-Jun-2010,1 44444 53236296,24-Jun-2010,1 55555 8061,2010年7月15日,1 6666296,29-May-2010,1 77777 53236296,29-May-2010,1 888 6296,29-May-2010,1 99996296,27-May-2010,1 1010153236296,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 11111 53236296,29-May-2010,1 222253236296,2010年5月24日,1 3333353236296,24-Jun-2010,1 44444 53236296,24-Jun-2010,1 55555,8061,15-Jul-2010,1 2010年5月29日,1 77777 53236296,29-May-2010,1 2010年5月29日,1 2010年5月27日,1 1010153236296,29-May-2010,1
使用Vim,我将在Ex模式下进入以下行: :%s/^(\d+),(\d+,\d+-\w+-\d+,\d)$/\1,2/g

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

awk-F“,”nf可能是一个很好的解决方案,只要所有行都遵循此格式。但是您必须指定\v(verymagic)使magic运算(因为括号和+应该转义)@Dennis:NF的计算需要它。
BEGIN{
    FS=","
}

NF==5 { print; }
NF==4 { printf("%s,,%s,%s,%s\n", $1, $2, $3, $4); }
awk -F"," 'NF<5{sub(",",",,")}1' file