Imprimir linha se o valor nas alterações da coluna

2

Eu sei que isso deve ser fácil, googling mas não foi bem-sucedido. Desculpe por isso.

Eu gostaria de imprimir a primeira linha de grupos definida o valor na primeira coluna. Delimitador é uma guia.

Entrada:

A 5
A 3
B 2
B 1
B 77
C 4
C 10000
D 99

Saída:

A 5
B 2
C 4
D 99
    
por Michael 21.06.2017 / 13:16

3 respostas

8

O mais curto:

awk -F'\t' '!a[$1]++' file

A saída:

A   5
B   2
C   4
D   99
  • !a[$1]++ - garante impressão de linha ao encontrar o primeiro valor exclusivo da primeira coluna
por 21.06.2017 / 13:39
3

Algo parecido pode fazer o trabalho:

awk -F\t 'BEGIN {A=""} {if ($1!=A) { print $0; A=$1}}' input_file

Quando você inicializa a variável A selecione o valor inicial que não está na lista de existente na coluna 1

    
por 21.06.2017 / 13:30
1

Aqui estão duas opções não-awk:

sort u foo -k 1,1

Use sort exclusivamente para o recurso -u ( --unique ). Use apenas o primeiro caractere ( -k 1,1 ) para comparação.

rev foo | uniq -f 1 | rev

Use uniq . A opção -f permite apenas especificar um campo de início para comparação, então usamos um legerdemain para inverter primeiro ( rev ) a entrada antes de uniq e, em seguida, rev dessa saída novamente.

    
por 21.06.2017 / 19:17

Tags