2016-08-19 4 views
-1

을 분리 나는 다음과 같은 형식으로 내 테이블을 분석 할이탭을 구문 분석 쉼표 파일

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 

어떤 도움을 주시면 감사하겠습니다. awk와 감사

+0

코드 예는? – FunkySayu

+0

"다음 표의 형식으로 테이블을 구문 분석하고 싶습니다." 너 뭐 해봤 니? 행운을 빕니다. – shellter

+0

왜 파이썬 태그입니까? –

답변

1

쉬운 : 조각을 통해 단지 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 
+0

감사합니다. 코드의 첫 번째 섹션에서 'a'가 무엇인지 설명 할 수 있습니까? – pali

+0

@pali 링크에서 볼 수 있듯이 슬라이스가 저장되는 배열입니다. – fedorqui

+0

정보 주셔서 감사합니다. – pali

0

당신은 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 
1

awk은 멀티 문자의 RS가 필요합니다.

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