gpt4 book ai didi

linux - grep -f r t,如何使结果按 r 而不是 t 排序

转载 作者:IT王子 更新时间:2023-10-29 00:35:18 27 4
gpt4 key购买 nike

$ cat r
1
2
$ cat t
22
11
$ grep -f r t
22
11

结果是按照t中的顺序给出的,如何得到按r排序的结果?

最佳答案

您可以创建一个将所有内容保存在内存中的脚本,或者您可以应用 Schwartzian transform .这是对后者的简要尝试。

将您的 r 文件更改为 sed 脚本,该脚本为每个匹配打印一个索引号:

/1/s/^/00001 /
/2/s/^/00002 /

使用sed代替grep,并按前缀排序;然后丢弃前缀。

sed -f r t | sort -n | cut -d ' ' -f2- >output

创建 sed 脚本应该不会太难;这是一个简单的 Awk 脚本(哦,讽刺!)

awk '{ printf("/%s/s/^/%05i /\n", $0, NR) }' r >r.sed

如果你的正则表达式中有斜杠,事情就会稍微复杂一些。记住 /foo/ 也可以写成 \:foo: 所以如果你能找到一个合适的分隔符,它不会出现在你的数据中,那可能是最简单的解决方法。

如果您的 sed 可以从标准输入读取脚本(不是所有的都可以,但 Linux sed 应该没问题),您可以避免使用临时文件;然后整个流水线

awk '{ printf("/%s/s/^/%05i /\n", $0, NR) }' r |
sed -f - t | sort -n | cut -d ' ' -f2- >output

关于linux - grep -f r t,如何使结果按 r 而不是 t 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489957/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com