如果存在重复项,如何对文件进行排序并输出最新记录?

如果存在重复项,如何对文件进行排序并输出最新记录?

我将通过 API 收到的所有请求保存在一个文件中。如果重复请求到达,我希望仅处理最新请求。

排序命令没有帮助,我正在使用:

sort -r -k 1.69,1.88 ./InputFile | sort -k 1.70,1.88 -u   > ./sortedReqFile

这个想法是反转文件并从中获取唯一的,但它给出的结果与对输入文件直接排序 -u 相同。

答案1

只是一个疯狂的猜测

 awk '{A[substr($0,69,88)]=$0 ; } END { for ( b in A ) print A[b] ;}' InputFile |
 sort -k 1.70,1.88 -u   > sortedReqFile
  • awk 将保留最后一次出现的具有相同 69-88 范围字符的行。
  • b用作数组的索引A
  • ./数据文件前面不需要。

你问的问题

如果我反转文件,为什么 sort -u 给出相同的结果?

要点是您的第一次排序没有改变任何行,并且对于最终排序命令毫无用处。如果它们不更改或删除行,则您可以在之间添加任意数量的sort, tac

假设您用字母对文件进行排序H E L L O W O R L D(每个字母在一行中)

  • 排序文件:D E H L L L O O R W
  • 排序 -r 文件:W R O O L L L H E D
  • 排序 -r 文件 | 排序 -u :D E H L O R W
  • 排序 -u 文件:D E H L O R W

相关内容