加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 如何从file1匹配file2 grep内容并按file2的顺序放置它们

发布时间:2020-12-15 21:02:09 所属栏目:安全 来源:网络整理
导读:我有内容的file1.txt: rs002rs113rs209rs227rs151 rs104 我有内容的file2.txt: rs113 113rs002 002rs227 227rs209 209rs104 104rs151 151 我想获取与file1.txt中的记录匹配的file2.txt行,我试过: grep -Fwf file1.txt file2.txt 输出如下: rs113 113rs00
我有内容的file1.txt:

rs002
rs113
rs209
rs227
rs151 
rs104

我有内容的file2.txt:

rs113   113
rs002   002
rs227   227
rs209   209
rs104   104
rs151   151

我想获取与file1.txt中的记录匹配的file2.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,因此这应该仅用于足够小的文件,其中提出更好的解决方案的努力比使用此解决方案处理它们需要更长的时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读