Agrupar linhas em um arquivo com base no valor da coluna

1

Eu tenho uma planilha "csv" como abaixo

abc,12345,qwerty,A
xyz,12380,qwetty,R
abc,12389,qwerty,A
xyz,12324,qwetty,R

Gostaria de combinar linhas com valores semelhantes nas colunas 1, 2 e 4. Além disso, gostaria de substituir os dois últimos alfabetos da coluna 3 por "**". Amostra da saída é como abaixo:

abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R

O número total de linhas é superior a um milhão!

    
por Arpit 20.09.2018 / 18:33

2 respostas

2

Para classificar seu arquivo primeiro por col1, em seguida, por col2, em seguida, por 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

Então, para ofuscar o 2º campo, você poderia fazer

$ 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
    
por 20.09.2018 / 19:24
0
sort file | awk -F',' '{ sub(/..$/,"**",$2) }1' OFS=','
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R

Caso você queira alterar o separador de vírgulas para a guia. você pode usar este comando:

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
    
por 20.09.2018 / 19:35