Awk 在新行中打印文件每列之前的第1列

Awk 在新行中打印文件每列之前的第1列,awk,sed,Awk,Sed,我有一个1000到2000列和3000多行的数据文件 输入示例数据 GO:0009987 Os760 Os840 Os550 Os380 Os590 Os340 GO:0043170 Os610 Os043 Os035 预期产出: GO:0009987 Os760 GO:0009987 Os840 GO:0009987 Os550 GO:0009987 Os380 GO:0009987 Os590 GO:0009987 Os340 GO:0043170 Os610

我有一个1000到2000列和3000多行的数据文件

输入示例数据

GO:0009987 Os760  Os840  Os550  Os380  Os590  Os340
GO:0043170 Os610  Os043  Os035
预期产出:

GO:0009987 Os760  
GO:0009987 Os840  
GO:0009987 Os550  
GO:0009987 Os380  
GO:0009987 Os590
GO:0009987 Os340
GO:0043170 Os610
GO:0043170 Os043 
GO:0043170 Os035
我试过这个:

sed 's/ /\n/2; P; D' filename | awk 'NF==2 {a =$1;b=$2; print; next} {print a,$0}'
sed 's/ /\n/2; P; D' filename | awk 'NF==2 {a =$1;b=$2; print; next} {print a,$0}'
但这给了我这样的结果<代码>(第1列中有一个额外的GO值)。我想从文件中删除这个额外的GO

GO:0009987 Os760  
GO:0009987 Os840  
GO:0009987 Os550  
GO:0009987 Os380  
GO:0009987 Os590
GO:0009987 Os340
GO:0009987
GO:0043170 Os610
GO:0043170 Os043 
GO:0043170 Os035
GO:0043170

请尝试以下内容(根据Sundeep先生的评论更改了分隔选择)


awk'{for(i=2;i我注意到我的输入文件中有一个小错误。否则它也可以正常工作:

awk 'BEGIN{FS=":| +"} {for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file
awk -F':| +' '{for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file
sed 's/ /\n/2; P; D' filename | awk 'NF==2 {a =$1;b=$2; print; next} {print a,$0}'