首页 > 解决方案 > 将第一个字段作为前缀添加到文本文件中的所有其他字段

问题描述

我希望这可以通过 awk 轻松解决,尽管无法管理它。

我有一个制表符分隔的多行文本文件。在每一行中,第一个字段中有一个标识符,然后是 0 到 8 个附加字段,其中包含有关此标识符的信息。如:

文件Ihave.txt:

LOC107198162    GO:0016021                          
LOC107198170    GO:0004896   GO:0005515  GO:0016020                 
LOC107198182    GO:0016787                          
LOC107198203                                
LOC107198204    GO:0007160          
...

我需要将标识符 (LOC*) 添加/复制到其各自行中包含文本 (GO:*) 的每个字段,并在两侧添加一个带有空格的“=”符号。IE

文件Iwant.txt

LOC107198162    LOC107198162 = GO:0016021                           
LOC107198170    LOC107198170 = GO:0004896    LOC107198170 = GO:0005515   LOC107198170 = GO:0016020                  
LOC107198182    LOC107198182 = GO:0016787                           
LOC107198203                                
LOC107198204    LOC107198204 = GO:0007160   
...

我可以通过使用对第二个字段(第一次出现的信息)执行此操作,awk 'BEGIN{OFS="\t"}$2=$1" = "$2'但似乎找不到应用于行中其他文本字段的正确方法。另外,如果那里没有文本,我不想将标识符复制到字段中。

标签: linuxbashtextawk

解决方案


你可以试试这个 awk 脚本:

awk '{for(i=2;i<=NF;i++) $i=$1 " = " $i}1' OFS='\t' fileIhave.txt

该脚本循环遍历该行中的所有字段(第一个字段除外)并将第一个字段添加到所有字段。


推荐阅读