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,因此这应该仅用于足够小的文件,其中提出更好的解决方案的努力比使用此解决方案处理它们需要更长的时间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |