Classificando duas colunas com ordenação e uniq

0

Eu tenho um arquivo que precisa ser classificado de uma maneira específica, mas não consigo descobrir como fazer isso.

Eu tentei o seguinte comando, mas ele não me dá o que eu quero:

sort -t" " -k1,1 Original_File | uniq -d > Desired_Output

Original_File:

User1 US
User1 NG
User2 US
User3 US
User4 US
User4 EN
User5 US

Desired_Output:

User1 US
User1 NG
User4 US
User4 EN
    
por Roboman1723 27.08.2014 / 18:14

2 respostas

2

Você pode extrair a primeira coluna, pegar as duplicatas e voltar ao arquivo novamente:

cut -f1 -d' ' Original_File | sort | uniq -d | grep -wFf- Original_File
    
por choroba 27.08.2014 / 18:21
2

O exemplo de entrada e saída foi atualizado; Os exemplos na primeira seção usam a entrada de exemplo original para mostrar exemplos de detalhes em variantes:

Entrada original em Original_File :

User1 US
User1 NG
User2 US
User3 US
User4 US
User5 US

Você pode pular a parte userN para uniq com a opção -f para ignorar os campos principais - separados por espaço:

$ sort -t" " -k1,1 Original_File | uniq -f 1 
User1 NG
User1 US

Para a mesma ordem da saída do exemplo, você pode inverter a classificação - isso alterará os valores "label" das linhas exclusivas:

$ sort -r -t" " -k1,1 Original_File | uniq -f 1
User5 US
User1 NG

Observe o User5 na primeira linha de resultado. Se isso não for aceitável, apenas classifique novamente:

$ sort -t" " -k1,1 Original_File | uniq -f 1 | sort  -t" " -k1,1 -r
User1 US
User1 NG

Se a parte UserN não estiver separada por espaço, mas tiver um tamanho fixo, você poderá ignorá-la em uniq com a opção -s :

$ sort -t" " -k1,1 Original_File | uniq -s 6
User1 NG
User1 US

Com a entrada de exemplo atualizada, este é o comando para criar a ordem de classificação necessária:

$ sort -t" " -k1,1 Original_File | uniq -f 1 | sort -t" " -k1,1  -k2,2r
User1 US
User1 NG
User4 US
User4 EN

classifica o segundo campo para inverter a ordem.

    
por Volker Siegel 27.08.2014 / 18:29