根据列值对一个文件中的行进行分组

根据列值对一个文件中的行进行分组

我有“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

相关内容