Recupera a primeira ocorrência do registro, onde o padrão correspondente é obtido da entrada

0

Eu tenho uma lista como esta:

2017-12-11  AAOI    40.33
2017-11-15  AAOI    44.3492
2017-12-15  AEIS    70.98
2017-11-15  AEIS    80.137
2017-10-23  AIEQ    25.1601
2017-11-15  AMBA    52.6501
2017-12-05  ATHM    57.2
2017-11-09  AUDC    7.02
2017-12-22  BEW 0.58
2017-10-17  BIOP    8.19
2017-12-08  BLDP    4.86
2017-12-21  BLOC    2.3
2017-12-12  BLOC    2.7
2017-12-11  BLOC    2.32
2017-12-04  BLOC    2.39
2017-11-27  BLOC    2.6
2017-11-15  BOX     21.63
2017-12-22  BTL 10.5638
etc.

Quero obter a primeira correspondência (mais recente) para cada símbolo, símbolo mantido na segunda coluna. Com a entrada de amostra acima, esta deve ser a saída:

2017-12-11  AAOI    40.33
2017-12-15  AEIS    70.98
2017-10-23  AIEQ    25.1601
2017-11-15  AMBA    52.6501
2017-12-05  ATHM    57.2
2017-11-09  AUDC    7.02
2017-12-22  BEW 0.58
2017-10-17  BIOP    8.19
2017-12-08  BLDP    4.86
2017-12-21  BLOC    2.3
2017-11-15  BOX 21.63
2017-12-22  BTL 10.5638

A lista já está classificada pela coluna 2 crescente e depois pela coluna 1 decrescente.

Estou pensando nas linhas de usar o awk para definir o padrão de correspondência como $ 2 (segunda coluna) e as correspondências de pipe baseadas nesse padrão.

Esta não é a primeira ocorrência única; é a primeira ocorrência única em que a exclusividade é baseada somente na coluna 2. Como um uniq por coluna e retorna apenas a primeira ocorrência. Por conseguinte, generoso com as tags.

Eu não consigo ligar os pontos. Como você faria isso?

    
por HenrikJson 26.12.2017 / 01:00

2 respostas

2

Duas maneiras de fazer isso:

sort -u -k2,2 infile
awk -F" " '!_[$2]++' infile

    
por 26.12.2017 / 01:20
0

Eu fiz isso por combinação de awk e sed.

for  w in 'cat filename | awk '{print $2}' | sort | uniq'; do sed -n '/'$w'/p' filename| sed -n '1p'; done 

saída

2017-12-11  AAOI    40.33
2017-12-15  AEIS    70.98
2017-10-23  AIEQ    25.1601
2017-11-15  AMBA    52.6501
2017-12-05  ATHM    57.2
2017-11-09  AUDC    7.02
2017-12-22  BEW 0.58
2017-10-17  BIOP    8.19
2017-12-08  BLDP    4.86
2017-12-21  BLOC    2.3
2017-11-15  BOX     21.63
2017-12-22  BTL 10.5638
por 26.12.2017 / 06:21