首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个列表之间的grep

两个列表之间的grep
EN

Unix & Linux用户
提问于 2020-05-26 08:33:31
回答 4查看 960关注 0票数 3

我的Linux机器上有两个文件。第一个"list.txt“包含一个对象列表(2649个对象),而第二个"list_interactors.txt”包含一个较短的列表,其中一些对象在以前的列表中(719个对象),对于每个对象,在其他列中有一些相关的变量。我想用文件"list_interactors“中的特定对象的相关变量列出所有对象(2649)的列表。

示例:

文件list.txt

代码语言:javascript
复制
6tyr_A_002__________
7yer_2_009__________
3erf_1_001__________
2dr5_D_2-3__________

文件list_interactors.txt

代码语言:javascript
复制
6tyr_A_002__________    6tyr1_B    QRT54R   AAAAA
3erf_1_001__________    3erf2_B    QAEF6R   XXXXX

output.txt

代码语言:javascript
复制
6tyr_A_002__________    6tyr1_B    QRT54R   AAAAA
7yer_2_009__________
3erf_1_001__________    3erf2_B    QAEF6R   XXXXX
2dr5_D_2-3__________

我对编程语言不太熟悉。我尝试在这个脚本中使用grep函数:

代码语言:javascript
复制
grep -f list.txt list_interactors.txt

但是输出是一个类似于文件"list_interactors.txt“的文件。

你能帮帮我吗?

EN

回答 4

Unix & Linux用户

发布于 2020-05-26 08:44:50

代码语言:javascript
复制
$ join -a 1  <( sort list.txt ) <( sort list_interactors.txt )
2dr5_D_2-3__________
3erf_1_001__________ 3erf2_B QAEF6R XXXXX
6tyr_A_002__________ 6tyr1_B QRT54R AAAAA
7yer_2_009__________

这使用join在两个文件之间执行关系连接操作。默认情况下,第一个字段将用作联接键。

-a 1选项使join输出第一个文件中的所有行,即使在第二个文件中没有匹配(它执行“左联接”)。

需要对join的输入数据进行排序,我们通过在命令行上的两个进程替换中对每个文件分别调用sort来实现这一点。你也可以选择对文件进行预排序。

如果您的数据是以制表符分隔的,则可能需要将-t 添加到join命令参数的开头。这将使输出保留现有的选项卡分隔符。

如果要将>output.txt存储在文件中,则通过将添加到命令末尾重定向输出。

\t'添加到D7命令参数的开头。这将使输出保留现有的选项卡分隔符。

如果要将D8存储在文件中,则通过将添加到命令末尾重定向输出。

票数 12
EN

Unix & Linux用户

发布于 2020-05-26 09:03:17

如果要保持排序,可以使用awk

代码语言:javascript
复制
awk '
    FNR==NR {s[$1]=$0}
    FNR!=NR {if(s[$1]) print s[$1]; else print $0}
' list_interactors.txt list.txt

输出:

代码语言:javascript
复制
6tyr_A_002__________    6tyr1_B    QRT54R   AAAAA
7yer_2_009__________
3erf_1_001__________    3erf2_B    QAEF6R   XXXXX
2dr5_D_2-3__________
票数 5
EN

Unix & Linux用户

发布于 2020-05-26 13:04:36

代码语言:javascript
复制
$ awk 'NR==FNR{a[$1]=$0; next} {print ($1 in a ? a[$1] : $0)}' list_interactors.txt list.txt
6tyr_A_002__________    6tyr1_B    QRT54R   AAAAA
7yer_2_009__________
3erf_1_001__________    3erf2_B    QAEF6R   XXXXX
2dr5_D_2-3__________
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/589007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档