PDA

Visualizza la versione completa : giocare con file di testo


iperuber
22-05-2009, 11:15
ciao,
uso ubuntu 8.10 live.
Questo il mio problema: ho una serie di files testuali in una cartella, vorrei scrivere un comando che legge ogni file (tipo ls), cancella la prima e l'ultima riga (non saprei) e copia il rimanente in un nuovo file.
Pertanto l'obiettivo avere un unico file composto dalla concatenazione di tutti i files privati di tutte le prime ed ultime righe.
Avete qualche dritta da darmi?
Grazie

detroit
22-05-2009, 11:38
Per eliminare la prima riga di un file

awk 'NR != 1' miofile

per eliminare l'ultima riga di un file supponendo che il file abbia 3 righe

head -n 2 miofile

ti fai un ciclo for e redirezioni il risultato su un unico file

iperuber
22-05-2009, 11:40
i files non hanno tutti la stessa dimensione ed inoltre ogni file ha migliaia di righe.
Inoltre una volta eliminate la prima e l'ultima devo unirli in un unico file

detroit
22-05-2009, 11:44
beh usi nl per determinare il numero di righe, e da li sai quante ne devi togliere con head.

psykopear
22-05-2009, 13:13
a con un ciclo for, per ogni output dei vari file modificati li metti in un file temporaneo redirigendo l'output con >>.

Magari leggi qui

http://www.pluto.it/files/ildp/guide/abs/index.html

iperuber
22-05-2009, 13:24
ok, grazie.
Mi sto sbattendo un p che non sono molto pratico come si evince :dh:

iperuber
22-05-2009, 14:16
non riesco a fare una cazzatina:

mi serve sapere quante righe ha un file pertanto se scrivo:

ubuntu@ubuntu:~/AN$ wc -l AN_MTFS_MEDIASET_090414_*.dat
360 AN_MTFS_MEDIASET_090414_0000005056.dat
ubuntu@ubuntu:~/AN$

ottengo il risultato, ossia 360 + nome del file

ora dovrei inizializzare una variabile a 360
come cavolo faccio?

Grazie

toraz
22-05-2009, 14:17
for file in `ls la_directory_dove_stanno_i_file/*`; do
head -n-1 $file | tail -n-1 >> nuovo_file
done

Una cose del genere...

Loading