2016-06-16 90 views
5

Ho un'uscita con i nomi di file diversi: file_1.dat..file_15.datCome incollare colonne da più file in modo ordinato?

Sto usando questo comando:

paste result_*.dat | column -s $'\t' -t >> cache/Final_Evolution.dat 

Ma i miei file di output sono ordinati in questo modo e io non so perché:

file_1.dat 
file_11.dat 
file_13.dat 
file_15.dat 
file_3.dat 
file_5.dat 
file_7.dat 
file_9.dat 

Così, quando uso il comando menzionato, l'ordine delle colonne di dati è di 1, 11, 13 ... quando voglio 1,3,5,7 ...

T ti prendo molto in anticipo

+5

Normalizza i nomi dei file. 'per f nel file _ ?. dat; fai mv "$ f" "$ {f/_/_ 0}"; done' – choroba

+0

@choroba SÌ !!!. Che funzioni! Grazie mille a teuuuuuuu. – Enrique

+0

Ciò si verifica a causa dell'ordine del modello glob linux (ordine alfabetico). Dai un'occhiata a http://unix.stackexchange.com/questions/38317/glob-with-numerical-order – blackSmith

risposta

4

Normalizza prima i nomi file.

for f in file_?.dat ; do 
    mv "$f" "${f/_/_0}" 
done 

Sostituisce _ da _0 in tutti i file con i numeri a una cifra (? corrisponde a un singolo carattere).

1

Se siete alla ricerca di un modo con sort, si può fare come

sort -t _ -k 2 -g cache/Final_Evolution.dat 

dove -t per de-limitante con _ e -k 2 per seconda colonna dopo de-limitante (che è la colonna i numeri) e -g per ordinamento numerico.

file_1.dat 
file_3.dat 
file_5.dat 
file_7.dat 
file_9.dat 
file_11.dat 
file_13.dat 
file_15.dat 
+0

'sort -V' è utile anche qui. –

1

È possibile normalizzare i file come sottolineato nei commenti o utilizzare un glob come questo:

paste file_?.dat file_??.dat 

? si espanderà fino a esattamente un charcter, così file_?.dat può espandere solo: file_1.dat .. file_9.dat e file_??.dat possono espandersi solo a file_10.dat .. file_99.dat.

Ciò tuttavia non funzionerà se non si dispone di file corrispondenti al glob poiché verranno trattati letteralmente.