解析制表符和逗号分隔文件

时间:2016-08-19 22:01:07

标签: python perl ubuntu awk

我有一个包含数千行的表格

A   GO:0008150,GO:0050789,GO:0050794,GO:0051726,GO:0065007
B   GO:0008150,GO:0050789,GO:0050794,GO:0051726,GO:0065007

我想用以下格式解析我的表格。

A   GO:0008150
A   GO:0050789
A   GO:0050794
A   GO:0051726
A   GO:0065007
B   GO:0008150
B GO:0050789
B GO:0050794
B GO:0051726
C GO:0065007

任何帮助将不胜感激。感谢

3 个答案:

答案 0 :(得分:1)

使用awk轻松:只需split()第二列并循环切片:

$ awk '{n=split($2, a, ","); for (i=1;i<=n;i++) print $1,a[i]}' file
A GO:0008150
A GO:0050789
A GO:0050794
A GO:0051726
A GO:0065007
B GO:0008150
B GO:0050789
B GO:0050794
B GO:0051726
B GO:0065007

答案 1 :(得分:1)

没有循环的

awk需要多字符RS。

$ awk -v RS=",|\n" 'NF==2{t=$1;$1=$2} {print t,$1}' file

答案 2 :(得分:0)

您可以将Python与re模块一起使用。

import re
text = '''A   GO:0008150,GO:0050789,GO:0050794,GO:0051726,GO:0065007
B   GO:0008150,GO:0050789,GO:0050794,GO:0051726,GO:0065007'''
pattern = {
'A': re.compile('A\s+(GO.*)\n'),
'B': re.compile('B\s+(GO.*)\n*')
}
A = 'A  ' + '\nA  '.join(pattern['A'].findall(text)[0].split(','))
B = 'B  ' + '\nB  '.join(pattern['B'].findall(text)[0].split(','))
print A
print B

输出:

A  GO:0008150
A  GO:0050789
A  GO:0050794
A  GO:0051726
A  GO:0065007
B  GO:0008150
B  GO:0050789
B  GO:0050794
B  GO:0051726
B  GO:0065007