Uma amostra de dados de entrada com 3 colunas, 1ª e 3ª coluna tem valores em duplicatas, precisa imprimi-los exclusivamente com sua contagem de repetição.
sort -u ajuda em algum sentido, mas não consegue imprimir a ocorrência de valores repetidos relacionados à 1ª e 3ª coluna.
Input :
A 3210 -06:00 A 5172 -06:00 A 3335 -07:00 A 3258 -05:00 B 3322 -05:00 B 5097 -05:00 C 3238 -06:00 C 5364 -05:00 C 3366 -06:00 C 3293 -06:00
Resultado :
A(2) -06:00 A(1) -07:00 A(1) -05:00 B(2) -05:00 C(3) -06:00 C(1) -05:00
ou
Resultado :
A 2 -06:00 A 1 -07:00 A 1 -05:00 B 2 -05:00 C 3 -06:00 C 1 -05:00
Não é exatamente o formato que você deseja, mas atende a todos os outros requisitos:
awk '{print $1" "$3}' <inFile> | sort | uniq -c
Em inglês, use awk para imprimir apenas a primeira e a terceira colunas, depois classifique e uniq com count.
Observe que a saída pode não ser classificada. Passe-o,
sort
se necessário.O código armazena a contagem de quantas vezes o primeiro e o terceiro campos da entrada ocorreram juntos como um par, na
count
matriz (com o primeiro e o terceiro campos como o índice). No final, fazemos um loop sobre os índices do array, dividindo-os no primeiro e terceiro campos originais (comofield[1]
efield[2]
respectivamente) e os exibimos junto com a contagem no formato desejado.No formato alternativo:
Se o arquivo de entrada usar um único espaço para o separador de campo (caso contrário, use
awk '{ print $1,$3 }'
em vez decut
):Para trocar as duas primeiras colunas:
Dado Input use
cut
,sort
,uniq
esed
:Usando
datamash
esed
:Saída de qualquer um: