使用2个制表符分隔的列将行添加到.txt文件中

时间:2015-10-14 21:56:53

标签: text sed

我有一个2列(制表符分隔).txt文件,如下所示:

1.00  GO:0005789,GO:0016021,GO:0005509,GO:0005506
3.33  GO:0005615,GO:0030325,GO:0009653
1.67  GO:0005615,GO:0030325
26.76 GO:0005737,GO:0003993,GO:0004726,GO:0004725

我想将其转换为2列.txt文件,如:

1.00 GO:0005789
1.00 GO:0016021
1.00 GO:0005509
1.00 GO:0005506
3.33 GO:0005615
3.33 GO:0030325
3.33 GO:0009653
1.67 GO:0005615
1.67 GO:0030325
26.76 GO:0005737
26.76 GO:0003993
26.76 GO:0004726
26.76 GO:0004725

我尝试了sed 's/\(^[^,]*\).*/\1/g' <in.txt,但它的作用是删除GOterms,除了每行中的第一个。它给了我这个:

1.00  GO:0005789
3.33  GO:0005615
1.67  GO:0005615
26.76 GO:0005737

有什么建议吗?使用sed与否,一切都将受到欢迎。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

使用awk

awk -F',| +|\t' '{for(i=2;i<=NF;i++){print $1" "$i}}' input.txt

答案 1 :(得分:1)

您可以使用awk

$ cat test.txt
1.00    GO:0005789,GO:0016021,GO:0005509,GO:0005506
3.33    GO:0005615,GO:0030325,GO:0009653
1.67    GO:0005615,GO:0030325
26.76   GO:0005737,GO:0003993,GO:0004726,GO:0004725

$ awk -F'[\t,]' '{for (i=2;i<=NF;i++) print $1"\t"$i }' test.txt

结果:

1.00    GO:0005789
1.00    GO:0016021
1.00    GO:0005509
1.00    GO:0005506
3.33    GO:0005615
3.33    GO:0030325
3.33    GO:0009653
1.67    GO:0005615
1.67    GO:0030325
26.76   GO:0005737
26.76   GO:0003993
26.76   GO:0004726
26.76   GO:0004725

解释

  • -F设置分隔符。这里给出了两个分隔符。一个是\t,另一个是,
  • NF告诉我们字段的数量。我们从字段#2循环到尽可能多的字段。对于找到的每个字段,我们打印第一个字段和当前字段