2017-01-31 20 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

もちろん私は何かを試しました。私は何をすべきかわからず、学びたいので投稿しました。私は動作するperlスクリプトを持っていますが、各行を別々のファイルに入れて各ファイルに対して実行する必要があります。しかし、私のファイルには800行しかないので、もちろん良い考えではありません。それは良いコードではありません。私は別のものが必要ですが、私は簡単な方法でそれをやる方法がわかりません。申し訳ありませんが、高度なプログラマーではない場合、私はこのグループも同様に学ぶことになりました。 – Paul

+0

これらのタブはグループと値の間にありますか(Group1とm1 ...の間)ですか? –

答えて

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

関連する問題