首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个文件之间的grep和文件1中的空行

两个文件之间的grep和文件1中的空行
EN

Unix & Linux用户
提问于 2020-06-16 13:39:14
回答 2查看 94关注 0票数 0

我对grep有个问题。

我有一个名为Uniprot_interactors.txt的文件,其中包含一个代码列表(例如。GRT986E),有时在对象之间有一个或多个空行。

在其他一些情况下,我有一个对象,由两个部分组成,被一个低破折号分割(例如。TRY546 _ TRE578),而这些行必须被视为空行。

在此之后,我有另一个文件Good_interactors.txt,它包含一个代码列表,每个人都有一个变量(es )。aaaaaa)是相关联的。我想从这些文件的output.txt中获得一个输出( grep ),但是我希望像在第一个文件中一样保持行为空。

举个例子:

  • file1:UNIPROT_interactors.txt QR846OI PO3R56 UJ6Y68 YU654R PL92WS GH654Y _ HUY765R PIHYUD
  • 文件2:GOOD_Interactors.txt TYRT68Y aaaaaaaaa QR846OI bbbbbbbbb FDR59I cccccccc PO3R56 ddddddd UJ6Y68 eeeeeee VFR6y7 fffffff gggggggg UH7609 hhhhhhhh
  • 文件output.txt (文件1的相同格式) QR846OI bbbbbbbbb PO3R56 ddddddd UJ6Y68 eeeeeee YU654R PL92WS GH654Y _ HUY765R PIHYUD

我试着使用这段代码:

代码语言:javascript
复制
grep -f Uniprot_interactors.txt GOOD_interactors.txt > output.txt

但是文件1的格式未被保留,空行已被删除。

EN

回答 2

Unix & Linux用户

发布于 2020-06-16 14:03:30

您不能在这里使用grep,因为grep的目的是提取匹配特定正则表达式的行(在某些情况下是单词)。grep实用程序不修改数据,这就是您想要做的事情(将数据添加到从一个文件到另一个文件的行)。

使用awk在以Uniprot标识符为键的关联数组names中保存良好的交互参与者。然后根据第一列中的Uniprot标识符输出这些交互器(同时在多个列的行上传递,或者没有未更改的已知良好的交互器):

代码语言:javascript
复制
$ awk 'FNR==NR { names[$1] = $0; next } NF > 1 || !($1 in names) { print; next } { print names[$1] }' GOOD_Interactors.txt UNIPROT_interactors.txt
QR846OI bbbbbbbbb

PO3R56 ddddddd
UJ6Y68 eeeeeee


YU654R

PL92WS
GH654Y _ HUY765R
PIHYUD gggggggg

请注意,我们将两个文件作为awk命令的输入。在读取第一个文件时,只会触发具有FNR==NR条件的块,而在读取第二个文件时将跳过该块。

特殊变量FNRNRNF分别是从当前文件中读取的记录数(行)、在所有文件中读取的记录数以及当前记录中的字段数(列)。

票数 1
EN

Unix & Linux用户

发布于 2020-06-16 13:59:46

在file1读取线上循环,如果空回,则返回相应的grep数据并打印出来。

代码语言:javascript
复制
while read line ; do
    if ((${#line}));then
        grep "${line}" file2
    else
        echo
    fi
done < file1 > output.txt

代码语言:javascript
复制
file2content="$(cat file2)";
while read line ; do
    if ((${#line}));then
        grep "${line}" <<< "${file2content}"
    else
        echo
    fi
done < file1 > output.txt
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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