Duas maneiras de fazer isso:
classifique sort -u -k2,2 infile
awk awk -F" " '!_[$2]++' infile
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?
Duas maneiras de fazer isso:
classifique sort -u -k2,2 infile
awk awk -F" " '!_[$2]++' infile
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
Tags text-processing awk sed