2016-09-03 2 views
0

Wie kann ich verschiedene Zeilen zu verschiedenen Zeiten mit einer Datei mit Spezifikation wiederholen? (Ich glaube, das wird besser veranschaulichen)Wie wiederholt man Zeilen zu verschiedenen Zeiten in Linux Ubuntu?

Beispiel (Datei, die ich wiederholt Linien wollen):

ID01 rs01 AB 
ID02 rs01 BA 
OA03 rs01 AA 
EA04 rs01 BB 

Beispiel (Datei angeben, wie oft jede Zeile wiederholt haben müssen - die Angabe der Zeichen in der ersten Spalte):

ID01 1 
ID02 5 
OA03 2 
EA04 3 

Und ich möchte die Ausgabedatei:

ID01 rs01 AB 
ID02 rs01 BA 
ID02 rs01 BA 
ID02 rs01 BA 
ID02 rs01 BA 
ID02 rs01 BA 
OA03 rs01 AA 
OA03 rs01 AA 
EA04 rs01 BB 
EA04 rs01 BB 
EA04 rs01 BB 

Aber in meinem Fall sind meine realen Daten groß. Vielen Dank.

Antwort

1

folgende Python-Skript wird die Arbeit machen:

import sys 

default_repeats = 1 

repeats_file = open(sys.argv[2]) 
data_file = open(sys.argv[1]) 

repeats = { i: int(n) for i, n in (l.split()[:2] for l in repeats_file.readlines()) } 

for line in data_file.readlines(): 
    identifier = line.split(' ')[0] 
    sys.stdout.write(line * repeats.get(identifier, default_repeats)) 

Es akzeptiert zwei Argumente:

$ python script_file.py <file_with_data> <file_with_repetitions> 
+0

Danke. Aber es erscheint ein Fehler, den ich nicht gefunden habe: 'Traceback (letzter Aufruf zuletzt): Datei" script_file.py ", Zeile 10, in Druckzeile * repeats [Bezeichner], keyError: '1''. Wie kann ich das lösen? Vielen Dank. –

+0

Dieser Fehler tritt auf, wenn eine bestimmte ID nicht in der Datei mit Wiederholungen enthalten ist. Ich habe dieses Skript bearbeitet und in einer solchen Situation wird es die Zeile wiederholen, die die Standardanzahl der Wiederholungen verwendet, die in der 'default_repeats' -Variable angegeben sind. – qzb

+0

Aber ich habe die Datei mit Wiederholungen, und ich habe die erste Spalte dieser Datei verwendet, um meine Daten zu erstellen. Also, ich denke, dass "Datei mit Daten" alle ID haben. Nein? Was denken Sie? –

Verwandte Themen