2016-06-16 28 views
5

Ich habe eine Ausgabe mit unterschiedlichen Dateinamen bekam: file_1.dat..file_15.datWie fügt man Spalten aus mehreren Dateien geordnet ein?

Ich verwende diesen Befehl ein:

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

Aber meine Ausgabedateien werden auf diese Weise, und ich sortiert weiß nicht, warum:

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

Also, wenn ich den Befehl erwähnt verwenden, ist die Reihenfolge der Datenspalten 1, 11, 13 ..., wenn ich 1,3,5,7 wollen ...

T Hank Sie sehr im Voraus.

+5

Normalisieren Sie die Dateinamen. 'für f in Datei _ ?. dat; do mv "$ f" "$ {f/_/_ 0}"; fertig ' – choroba

+0

@choroba JA !!!. Das funktioniert! Vielen Dank, duuuuuuuu. – Enrique

+0

Dies geschieht aufgrund der Reihenfolge der Linux-Glob-Muster (alphabetische Sortierung). Sehen Sie sich http://unix.stackexchange.com/questions/38317/glob-with-numerical-order an. – blackSmith

Antwort

4

Normalisieren Sie die Dateinamen zuerst.

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

Es ersetzt _ durch _0 in allen Dateien mit einstelligen Zahlen (? entspricht ein einzelnes Zeichen).

1

Wenn Sie nach einem Weg, mit sort suchen, können Sie es tun, wie

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

wo -t für de-Begrenzung mit _ und -k 2 für die zweite Säule nach de-Begrenzung (die die Zahlen Spalte) und -g für die numerische Sortierung.

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' ist auch hier hilfreich. –

1

Sie können die Dateien normalisieren, wie in den Kommentaren oder verwenden Sie eine glob wie dies wies darauf hin:

paste file_?.dat file_??.dat 

? erweitern wird, file_?.dat kann nur erweitern so genau einem charcter: file_1.dat .. file_9.dat und file_??.dat können nur auf file_10.dat .. file_99.dat erweitert werden.

Dies wird jedoch fehlschlagen, wenn Sie keine Dateien haben, die dem Glob entsprechen, da dies literarisch behandelt wird.