我有一个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与否,一切都将受到欢迎。 提前谢谢。
答案 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循环到尽可能多的字段。对于找到的每个字段,我们打印第一个字段和当前字段