Domanda

Sto eseguendo alcune elaborazioni di testo su un sistema Unix.Ho accesso alla riga di comando su questa macchina e ha installato Python, Perl e i programmi di elaborazione testo predefiniti, awk ecc.

Ho un file di testo simile al seguente:

2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 1232453488239 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488302 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488365 Tue Mar  3 10:47:44 2009
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
5622983575622325494 1232453323986 Thu Feb 12 15:57:49 2009

Fondamentalmente sono 3 righe:Data ID ID

Sto cercando di rimuovere tutte le righe che non hanno 2 ID e una data.Quindi i risultati finali saranno così:

2029754527851451717 1232453488239 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488302 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488365 Tue Mar  3 10:47:44 2009
5622983575622325494 1232453323986 Thu Feb 12 15:57:49 2009

Come suggerireste di farlo?In totale il file di testo è lungo circa 30.000 righe.

Saluti

Eef

È stato utile?

Soluzione

Con awk:

awk 'NF > 2' input_file > output_file

Altri suggerimenti

grep ':' filename
with open(source_filename) as src:
    with open(dest_filename, 'w') as dst:
        for line in src:
            if len(line.split()) > 1:
                dst.write(line)

Con Perl:

perl -ne 'print if /^([0-9]+\s+){2}.+$/' $filename

Sto solo lavorando con il mio perl qui, ma anche questo potrebbe aiutare:

perl -lane 'if (scalar(@F) == 3) { print @F;}' file >> file.out

Con Python:

file = open(filename, 'r')
lines = file.readlines()
file.close()

p = re.compile('^\d*$')

for line in lines:
    if not p.search(line): print line,
awk "NF>1" < filename
perl -i -lane 'print if($F[1])' file
sed '/^[0-9]$/d'  filename

(potrebbe essere necessario modificare il modello se le linee errate hanno spazi finali).Puoi anche usare grep -v, che ometterà il modello corrispondente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top