我有一个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
答案 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}'