我有一个按第一列排序的无标题 CSV 文件。当第二列和第三列相同时,我想将它们“折叠”为一列 - 即用逗号替换最后一列,它将与第一个逗号组合起来形成
,,
,表示第三列是空的。换句话说,这个:
0000001,11111,66666
0000002,12121,22222
0000003,33333,33333
0000004,74747,44444
0000005,12345,12345
...变成这样:
0000001,11111,66666
0000002,12121,22222
0000003,33333,,
0000004,74747,44444
0000005,12345,,
我尝试了
grep
和cut
的各种排列,但没有任何效果——我最接近的是cut -c 8-19 file.csv
,它只是隔离了第二列和第三列。我有一种感觉,需要跨列执行此操作,并且需要替换值而不是仅删除整行,这使得这变得足够复杂,需要 awk
或 sed
,而且我对其中任何一个都了解不够,不知道如何接近这个。
使用
sed
$ sed -E 's/([^,]*,([^,]*),)\2/\1,/' input_file
0000001,11111,66666
0000002,12121,22222
0000003,33333,,
0000004,74747,44444
0000005,12345,,
这个
awk
应该适合你:
awk 'BEGIN {FS=OFS=","} $2 == $3 {$3=OFS} 1' file
0000001,11111,66666
0000002,12121,22222
0000003,33333,,
0000004,74747,44444
0000005,12345,,