Como posso obter a última ocorrência de uma string repetida no arquivo de texto?

1

Eu tenho um arquivo de dados consiste em várias linhas e colunas com dados numéricos e de seqüência de caracteres. Alguns padrões de seqüência de caracteres e numéricos são repetidos. Eu preciso extrair o último padrão repetido. Por exemplo:

715 ANKR PRN 1 value 1
760 ISTA PRN 2 value 2
715 ANKR PRN 1 value 3
760 ISTA PRN 2 value 4
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
  1 ANKR PRN 7 value 8
  2 ISTA PRN 7 value 9
  1 ANKR PRN 7 value 10
  3 ISTA PRN 7 value 11
  1 ANKR PRN 7 value 12

neste exemplo "715 ANKR PRN 1", "760 ISTA PRN 2" e "1 ANKR PRN 7" são repetidos 3 vezes dentro do arquivo de dados. Preciso extrair os últimos padrões repetidos e classificar da seguinte forma:

715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
  1 ANKR PRN 7 value 12
    
por deepblue_86 15.03.2016 / 13:09

2 respostas

3

Usando ferramentas padrão, sort , rev , uniq :

% sort -k1,5 -k6,6nr file.txt | rev | uniq -f1 -d | rev

  1 ANKR PRN 7 value 12
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6

Se você quiser ordenar a saída como desejado:

% sort -k1,5 -k6,6nr file.txt | rev | uniq -f1 -d | rev | sort -k6,6n

715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
  1 ANKR PRN 7 value 12
    
por heemayl 15.03.2016 / 14:25
1

Que tal

awk '{a[ FS  FS  FS  FS ] = ; c[ FS  FS  FS  FS ]++}; END{for (i in a) {if (c[i]>1) print i,a[i]}}'

Teste com sua entrada

$ awk '{a[ FS  FS  FS  FS ] = ; c[ FS  FS  FS  FS ]++}; END{for (i in a) {if (c[i]>1) print i,a[i]}}' file
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
1 ANKR PRN 7 value 12
    
por steeldriver 15.03.2016 / 14:14