如何提取出现在同一文本文件中不同行的多位信息

Tim*_*Tim 8 command-line extract text-processing

我试图提取出现在同一文本文件中不同行的序列 ID 和簇号。

输入看起来像

>Cluster 72
0   319aa, >O311_01007... *
>Cluster 73
0   318aa, >1494_00753... *
1   318aa, >1621_00002... at 99.69%
2   318aa, >1622_00575... at 99.37%
3   318aa, >1633_00422... at 99.37%
4   318aa, >O136_00307... at 99.69%
>Cluster 74
0   318aa, >O139_01028... *
1   318aa, >O142_00961... at 99.69%
>Cluster 75
0   318aa, >O300_00856... *
Run Code Online (Sandbox Code Playgroud)

所需的输出是一列中的序列 ID 和第二列中的相应簇号。

>O311_01007  72
>1494_00753  73
>1621_00002  73
>1622_00575  73
>1633_00422  73
>O136_00307  73
>O139_01028  74
>O142_00961  74
>O300_00856  75
Run Code Online (Sandbox Code Playgroud)

有人能帮忙吗?

mur*_*uru 13

使用 awk:

awk -F '[. ]*' 'NF == 2 {id = $2; next} {print $3, id}' input-file
Run Code Online (Sandbox Code Playgroud)
  • 我们在空格或句点上拆分字段 -F '[. ]*'
  • 带有两个字段的>Cluster行,(行),将第二个字段保存为 ID 并移动到下一行
  • 与其他行,打印第三个字段和保存的 ID


oli*_*liv 5

您可以awk为此使用:

awk '/>Cluster/{
      c=$2;
      next
    }{
      print substr($3,2,length($3)-4), c
    }' file
Run Code Online (Sandbox Code Playgroud)

第一个块语句是捕获集群 ID。第二个块语句(默认的)是提取想要的数据,并打印出来。