我有“csv”电子表格,如下所示
abc,12345,qwerty,A
xyz,12380,qwetty,R
abc,12389,qwerty,A
xyz,12324,qwetty,R
我想合并第 1、2 和 4 列中具有相似值的行。此外,我想将第 3 列的最后两个字母替换为“**”。输出示例如下:
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R
总行数超过百万行!
答案1
要首先按 col1、然后按 col2、然后按 col4 对文件进行排序:
$ sort -t, -k1,1 -k2,2 -k4,4 file
abc,12345,qwerty,A
abc,12389,qwerty,A
xyz,12324,qwetty,R
xyz,12380,qwetty,R
然后要混淆第二个字段,你可以这样做
$ sort -t, -k1,1 -k2,2 -k4,4 file | sed 's/..,/**,/2'
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R
答案2
sort file | awk -F',' '{ sub(/..$/,"**",$2) }1' OFS=','
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R
如果您想将逗号分隔符更改为制表符。你可以使用这个命令:
sort file | sed 's/,/\t/g' | awk -F'\t' '{ sub(/..$/,"**",$2) }1' OFS='\t'
abc 123** qwerty A
abc 123** qwerty A
xyz 123** qwetty R
xyz 123** qwetty R