Ho un file enorme da elaborare e non sono riuscito a ottenere esattamente ciò di cui ho bisogno.
Tieni presente che non so in anticipo quante volte ciò si verifica in un file (ad esempio, potrebbe accadere> 1000 volte per file ).
Di seguito è riportato il mio file di input (delimitato da TAB), dove $ 1 è il numero di riga. La sequenza spezzata di numeri si verifica a $3:
; 365,0 0,12 0,12 A 0,726Questo è quello che voglio:
; 1 365,0 0,12 0,12 A 0,726Questo è il codice che riesco a scrivere finora (il nome del file è test.sh):
awk ' marker=substr($3,2,6) { if (FNR
Questo è l'output che ho ottenuto finora:
; 365,0 0,12 0,12 A 0,726803 47 M804 1 365,0 0,08 0,08 A 0,777Se qualcuno ha una soluzione migliore per questo, per favore fatemelo sapere.
Risposta accettata:
Sei stato taggato come awk
, si spera che Python sia utile.
Codice:
# !/usr/bin/pythonimport sysdef print_fixed_sequence(filename, line_num=0):con open(filename, 'rU') as f:for line in (x.strip() for x in f) :_, f1, f2, data =line.split('\t', 3) rec_num =int(f2[1:]) while line_num !=rec_num:print(line_num) line_num +=1 print('\t' .join((str(line_num), f1, f2, data))) line_num +=1print_fixed_sequence(sys.argv[1], line_num=795)
Risultati:
795796797 47 M797 1 365.0 0.05 0.05 A 0.825798 47 M798 1 365.0 0.05 0.05 A 0.825799 47 M799 1 365.0 0.70 0.70 A 0.404800 47 M800 1 365.0 0.00 0.00 A 0.990801802 47 M802 1 365.0 0.29 0.29 A 0.591803 47 M803 1 365,0 0,12 0,12 A 0,726