Awk 在新行中打印文件每列之前的第1列
我有一个1000到2000列和3000多行的数据文件 输入示例数据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
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}'