首页 > 解决方案 > 在新行中打印文件每列之前的第 1 列

问题描述

我有一个 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

标签: awksed

解决方案


您能否尝试以下操作(根据 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

或者:

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

推荐阅读