我将通过 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