如何获取文本文件中重复字符串的最后一次出现的位置?

如何获取文本文件中重复字符串的最后一次出现的位置?

我有一个数据文件,包含几行和几列,其中包含数字和字符串数据。一些字符串和数字模式是重复的。我需要提取最后一个重复的模式。例如;

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

使用标准工具sort,,,revuniq

% 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

答案2

怎么样

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

相关内容