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
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
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
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.