Как я могу получить последнее вхождение повторной строки в текстовом файле?

У меня есть файл данных, состоит из нескольких строк и столбцов со строковыми данными и числовым. Некоторая строка и числовые шаблоны повторяются. Я должен извлечь в последний раз повторенный шаблон. Например;

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

в этом примере "715 ANKR PRN 1", "760 ISTA PRN 2" и "1 ANKR PRN 7" повторяются 3 раза в рамках файла данных. Я должен извлечь в последний раз повторенные шаблоны и вид следующим образом;

715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
  1 ANKR PRN 7 value 12
1
задан 15 March 2016 в 17:15

2 ответа

Используя стандартные инструменты, 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

, Если Вы хотите вид вывод, как желаемый:

% 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
3
ответ дан 3 December 2019 в 06:59

Как насчет

awk '{a[$1 FS $2 FS $3 FS $4 FS $5] = $6; c[$1 FS $2 FS $3 FS $4 FS $5]++}; END{for (i in a) {if (c[i]>1) print i,a[i]}}'

Тестирование с Вашим входом

$ awk '{a[$1 FS $2 FS $3 FS $4 FS $5] = $6; c[$1 FS $2 FS $3 FS $4 FS $5]++}; 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
1
ответ дан 3 December 2019 в 06:59

Другие вопросы по тегам:

Похожие вопросы: