Linux: copiare il contenuto di un file
Ho una domanda banalissima, ma proprio non riesco a ricordarmi come si fa, ne' a trovarlo in rete.
Semplicemente voglio che il contenuto di un file venga aggiunto al fondo di un'altro file. Qual e' il comando da digitare dal terminale?
Semplicemente voglio che il contenuto di un file venga aggiunto al fondo di un'altro file. Qual e' il comando da digitare dal terminale?
Risposte
Il comando cat, tra le altre cose, fa quello che chiedi:
accoda al file f2 il contenuto del file f1.
cat f1 >> f2
accoda al file f2 il contenuto del file f1.
Grazie. Sono riuscito a fare una cosa del genere con il comando sort. Comunque che mi sono imbattuto in un altro tipo di problema, anzi 2:
Ho creato un file eseguibile che applica un programma su dei file di dati (fits, ma non è rilevante), e produce un output su un file. Il problema è che per ogni file letto, il file di output viene sovrascritto, mentre a me serve conservare i dati. Quindi ho impostato in modo tale che il contenuto del file di output venga sovrascritto su un altro file, che conterrà tutti gli output.
Il problema è che a quanto pare i processi non si aspettano e si intersecano, col risultato che viene fuori un file con i risultati molto molto confuso. C'è un modo semplice per evitare questo?
Inoltre c'è un modo per fare copiare solo alcune righe di un file?
Ho creato un file eseguibile che applica un programma su dei file di dati (fits, ma non è rilevante), e produce un output su un file. Il problema è che per ogni file letto, il file di output viene sovrascritto, mentre a me serve conservare i dati. Quindi ho impostato in modo tale che il contenuto del file di output venga sovrascritto su un altro file, che conterrà tutti gli output.
Il problema è che a quanto pare i processi non si aspettano e si intersecano, col risultato che viene fuori un file con i risultati molto molto confuso. C'è un modo semplice per evitare questo?
Inoltre c'è un modo per fare copiare solo alcune righe di un file?
Se ho compreso quanto ti serve:
1. Per non sovrascrivere un file è necessario aprirlo non in output, ma in append.
Ad esempio, con Linux:
2. Per copiare da un file solo alcune righe, si possono usare i comandi head e tail.
Ad esempio:
1. Per non sovrascrivere un file è necessario aprirlo non in output, ma in append.
Ad esempio, con Linux:
cat > f1cancella l'eventuale contenuto precedente di f1, riscrivendo dal primo record;
cat >> f1aggiunge al contenuto precedente di f1 altri record.
2. Per copiare da un file solo alcune righe, si possono usare i comandi head e tail.
Ad esempio:
head -15 f1|tail -6 f1 > f2pone in f2 le righe da 10 a 15 di f1.
Grazie 1000, questo comando mi serviva proprio.
L'unico problema che resta e' che creando un file exe, che esegue ripetutamente questo e altri comandi, quando lo eseguo non viene rispettato l'ordine dei comandi, col risultato che viene fuori un file molto confuso.
L'unico problema che resta e' che creando un file exe, che esegue ripetutamente questo e altri comandi, quando lo eseguo non viene rispettato l'ordine dei comandi, col risultato che viene fuori un file molto confuso.
"robbstark":
...
L'unico problema che resta e' che creando un file exe, che esegue ripetutamente questo e altri comandi, quando lo eseguo non viene rispettato l'ordine dei comandi, col risultato che viene fuori un file molto confuso.
Posso ipotizzare errori nell'apertura/chiusura dei file. Ma bisognerebbe dare uno sguardo al codice...
Oppure puoi cambiare l'ordine dei comandi, facendo fare prima tutte le scritture su file diversi e poi facendo un grosso cat alla fine.
Oppure, forse ancora migliore come prestazioni [se non parliamo di dimensioni esorbitanti] puoi tenere tutti i risultati in RAM e scrivere il tutto alla fine.
Concordo con Iorven sul fatto che senza vedere come è fatto il sorgente, è molto difficile dire qualcosa di utile.
Oppure, forse ancora migliore come prestazioni [se non parliamo di dimensioni esorbitanti] puoi tenere tutti i risultati in RAM e scrivere il tutto alla fine.
Concordo con Iorven sul fatto che senza vedere come è fatto il sorgente, è molto difficile dire qualcosa di utile.
Grazie a entrambi, ho risolto oggi. Alla fine il problema non l'ho capito benissimo, ma pare che fosse la combinazione di comandi head e tail, che a volte fa cosa voglio e a volte no.