Como deixar 'classificar | uniq -c 'separa o número de ocorrências por um caracterizador de tabulação?

3

uniq -c separe o número da ocorrência por espaços, o que é difícil para cut ou awk separar depois.

1000_A1\tB1\n
___1_A2\tB2\n

Eu posso resolver esse problema usando sed -r 's/^ *([0-9]+)/\t/' para alterar o delimitador para a guia. Então cut -f1 poderia retornar:

1000\tA1\tB1\n
1\tA2\tB2\n

Mas parece um uso comum ter uniq -c separando o número por guia. Por que esse recurso está faltando? Existe alguma outra maneira mais fácil de fazer isso?

    
por Cheng 10.10.2011 / 04:48

5 respostas

1

Parece que você tem um formato como <number><space><field 1 name><tab><field 2 name> e deseja verificar se a entrada está classificada por field 1 name . Se você quiser, basta remover a parte do número inicial e verificar a classificação da parte restante da primeira coluna:

echo "$input" | sed -r 's/^ *[^ ]+ //' | sort -c -k1,1
    
por 10.10.2011 / 10:20
1

Não sei porque acha que é difícil para awk separar o número. awk '{print $1}' imprime sem problemas.

$ sort file | uniq -c
      5 x
     10 y
$ sort file | uniq -c | awk '{print $1}'
5
10
$ 
    
por 14.02.2012 / 22:00
0

Você pode facilmente usar o corte para separá-los. Basta usar cut -d " " -f 1 para obter o número e cut -d " " -f 2- para obter o resto. O Awk irá processá-lo apenas como espaço em branco.

    
por 06.11.2011 / 17:27
0

Se as colunas de dados puderem conter espaços, você poderá usar sed para substituir o espaço por uma guia.

sed -e 's/<5 white space chars>//' | sed -e 's/<1 white space chars>/\t/'

Primeiro, sed substitui os espaços em branco iniciais gerados pela opção -c e o segundo substitui o espaço em branco entre a contagem e a primeira coluna de dados.

    
por 08.03.2016 / 17:15
-1

pode ser que isso funcione facilmente !!!

sort input_file | uniq -c | awk {'print $1 "\t" $2'} > tab_output
    
por 15.10.2015 / 09:49

Tags