gpt4 book ai didi

unix - 如何从匹配文件 2 的文件 1 中提取内容并将它们按文件 2 的顺序排列

转载 作者:行者123 更新时间:2023-12-01 01:14:41 25 4
gpt4 key购买 nike

我有 file1.txt内容:

rs002
rs113
rs209
rs227
rs151
rs104

我有 file2.txt内容:
rs113   113
rs002 002
rs227 227
rs209 209
rs104 104
rs151 151

我想得到 file2.txt 的行匹配 file1.txt 中的记录,为此我尝试过:
grep -Fwf file1.txt file2.txt 

输出如下:
rs113   113
rs002 002
rs227 227
rs209 209
rs104 104
rs151 151

这将提取所有匹配的行,但它是按照 file2.txt 中的出现顺序进行的。 .有什么方法可以在保持来自 file1.txt的顺序的同时提取匹配的记录吗? ?所需的输出如下:
rs002   002
rs113 113
rs209 209
rs227 227
rs151 151
rs104 104

最佳答案

一种(当然不是很优雅)解决方案是循环遍历 file1.txt并为每一行寻找匹配项:

while IFS= read -r line; do
grep -wF "$line" file2.txt
done < file1.txt

这给出了输出
rs002   002
rs113 113
rs209 209
rs227 227
rs151 151
rs104 104

如果您知道每行最多只出现一次,则可以通过告诉 grep 在第一次匹配后停止来加快速度:
grep -m 1 -wF "$line" file2.txt

据我所知,这是一个 GNU 扩展。

请注意,在每个循环中循环一个文件以对另一个文件进行一些处理通常是 sign that there is a much more efficient way to do things ,所以这可能只应用于足够小的文件,在这种情况下,提出更好的解决方案比使用此解决方案处理它们花费的时间更长。

关于unix - 如何从匹配文件 2 的文件 1 中提取内容并将它们按文件 2 的顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36520470/

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