替换 CSV 文件各列中的重复值

问题描述 投票:0回答:2

我有一个按第一列排序的无标题 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
,而且我对其中任何一个都了解不够,不知道如何接近这个。

bash csv sorting awk sed
2个回答
0
投票

使用

sed

$ sed -E 's/([^,]*,([^,]*),)\2/\1,/' input_file
0000001,11111,66666
0000002,12121,22222
0000003,33333,,
0000004,74747,44444
0000005,12345,,

0
投票

这个

awk
应该适合你:

awk 'BEGIN {FS=OFS=","} $2 == $3 {$3=OFS} 1' file

0000001,11111,66666
0000002,12121,22222
0000003,33333,,
0000004,74747,44444
0000005,12345,,
© www.soinside.com 2019 - 2024. All rights reserved.