2017-01-31 3 views
0

Unix 명령이나 Python/perl을 사용하여 그룹별로 모든 요소를 ​​다른 행으로 나누는 방법은 무엇입니까?그룹별로 요소를 다른 선으로 나누는 방법은 무엇입니까?

입력 파일 :

Group1  m1 m2 m3 
Group2  m4 
Group3  m5 m6 

출력 : 당신은 문자열을 분할 한 다음 저장하기 위해 사전을 사용할 수 있습니다

m1 Group1 
m2 Group1 
m3 Group1 
m4 Group2 
m5 Group3 
m6 Group3 
+0

는 SO 코드 작성 서비스가 아닙니다. 너 뭐 해봤 니? 코드를 게시하십시오. 효과가 있었거나 효과가 없었던 것은 무엇입니까? – RobertB

+0

물론 뭔가 해봤습니다. 나는 무엇을해야할지 모르며 배우기를 원하기 때문에 게시했습니다. 필자는 작동하는 펄 스크립트를 가지고 있지만 각 줄을 하나의 개별 파일로 만들어 각 파일에 대해 실행해야합니다. 하지만 내 파일에는 800 줄이 있으므로 당연히 좋은 생각이 아니며 좋은 코드가 아닙니다. 나는 다른 것을 필요로하지만, 나는 그것을 간단한 방법으로하는 법을 모른다. 미안하지만 고급 프로그래머가 아니라면이 그룹도 배우기는했지만 말입니다. – Paul

+0

그룹과 값 사이에 탭이 있습니까 (예 : 그룹 1과 그룹 1 사이)? –

답변

2

은 간단하게 :

awk '{for(i=2;i<=NF;++i)print $i, $1}' input_file 
+0

매우 간단하고 효과적입니다. 감사! – Paul

1

이 데이터를 사용하여

# go through each line in the file, and split into a dict 
members = {} 
for group, member_string in (x.split('\t', 1) for x in groups_file): 
    members.update({member: group for member in member_string.split()}) 

# print the resulting elements from the dict 
for member in sorted(members): 
    print(member, members[member]) 

을 :

groups_file = [x.strip() for x in """ 
    Group1\tm1 m2 m3 
    Group2\tm4 
    Group3\tm5 m6 
""".split('\n')[1:-1]] 

인쇄이 데이터 :

m1 Group1 
m2 Group1 
m3 Group1 
m4 Group2 
m5 Group3 
m6 Group3 
2

당신은 다음과 같은 파일 및 출력을 읽을 수 있습니다 :

with open("read.txt", "r") as infile: 
    groups = {} 
    for i in infile: 
     groups[i.split("  ")[0].split("Group")[1]] = i.strip("\n").split("  ")[1].split(" ") 

with open("output.txt", "w") as outfile: 
    for i in range(len(groups)): 
     for j in groups[str(i+1)]: 
      if j != "": 
       outfile.write("Group"+str(i+1)+" "+j+"\n") 

사전 그룹은 그룹에 대한 모든 m의 * 요소가 포함되어 있습니다. 출력 파일이 쓰여지면 그룹과 m * 그룹을 순회하면서 출력 파일에 줄 단위로 쓸 수 있습니다.

2

입력 파일 이름이 "input.txt"라고 가정합니다.

all_members = dict() 
with open('input.txt', 'r') as f: 
    for line in f: 
     line_tokens = line.split() 
     group_members = line_tokens[1:] 
     for member in group_members: 
      all_members[member] = line_tokens[0] 

for member in sorted(all_members.keys()): 
    print '{} {}'.format(member, all_members[member]) 

이 출력합니다 :

m1 Group1 
m2 Group1 
m3 Group1 
m4 Group2 
m5 Group3 
m6 Group3 
+0

제안 해 주셔서 감사합니다. 매우 효과적이었습니다. – Paul

관련 문제