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

时间:2019-11-13 07:01:48

标签: 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
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}'

但这给了我这样的结果。 (with one extra GO value in column 1)。我想从文件中删除此额外的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

2 个答案:

答案 0 :(得分:3)

您能不能试一下(根据Sundeep先生的评论更改定界选择)。

awk '{for(i=2;i<=NF;i++){print $1,$i}}' Input_file

或尝试:

awk 'BEGIN{FS=":| +"} {for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file

OR:

awk -F':| +' '{for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file

答案 1 :(得分:2)

我注意到输入文件中的小错误。 Otherwiswe也可以正常工作:

sed 's/ /\n/2; P; D' filename | awk 'NF==2 {a =$1;b=$2; print; next} {print a,$0}'