2017-02-13 2 views
-1

Ich habe Hunderte von großen Textdateien, fileAn und fileBn, in zwei Ordnern A und B, von denen ich die ersten sechs Spalten jeder Datei austauschen möchte. Ich würde dann die neuen Dateien fileCn und fileDn in den Ordnern C und speichern. Es gibt eine gleiche Anzahl von Dateien in A und B und die Dateilängen sind identisch.Tausche Textdateispalten und erstelle neue Datei

Wie kann dies mit bash oder regex erreicht werden?

Hier ist ein Ausschnitt aus fileA1:

"2015-11-11 00:00:00.00",59841,0.327,3.275,1.89275,32.048,8,32,11.61 
"2015-11-11 00:00:00.10",59842,0.086,3.56975,2.20325,32.10205,9,32,11.57 
"2015-11-11 00:00:00.20",59843,0.26575,3.343,1.8285,32.06717,10,32,11.57 
"2015-11-11 00:00:00.30",59844,-0.1915,3.28175,1.793,32.12122,11,32,11.57 

fileB1:

"2015-11-11 00:00:00.00",59841,2.48975,2.8535,-0.6575,32.13168,9 
"2015-11-11 00:00:00.10",59842,2.38975,3.10525,-0.62025,32.21362,10 
"2015-11-11 00:00:00.20",59843,2.224,3.09825,-0.43375,32.19968,11 
"2015-11-11 00:00:00.30",59844,2.102,3.029,-0.51825,32.21539,12 

Neue Datei fileC1, ersten sechs Spalten fileB1 von ersten sechs Spalten von fileA1 ersetzt:

"2015-11-11 00:00:00.00",59841,0.327,3.275,1.89275,32.048,9 
"2015-11-11 00:00:00.10",59842,0.086,3.56975,2.20325,32.10205,10 
"2015-11-11 00:00:00.20",59843,0.26575,3.343,1.8285,32.06717,11 
"2015-11-11 00:00:00.30",59844,-0.1915,3.28175,1.793,32.12122,12 

Neue Datei fileD1, erste sechs Spalten fileA1 ersetzt durch erste sechs Spalten von fileB1:

"2015-11-11 00:00:00.00",59841,2.48975,2.8535,-0.6575,32.13168,8,32,11.61 
"2015-11-11 00:00:00.10",59842,2.38975,3.10525,-0.62025,32.21362,9,32,11.57 
"2015-11-11 00:00:00.20",59843,2.224,3.09825,-0.43375,32.19968,10,32,11.57 
"2015-11-11 00:00:00.30",59844,2.102,3.029,-0.51825,32.21539,11,32,11.57 

hatte ich einen Blick auf dem paste Befehl kann aber nicht einen Weg machen dies zu einem Batch-Prozess finden.

+1

Haben Sie auch versuchen, 'cut' zu benutzen? –

+0

nur 'paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7)> fileC1' und' paste -d, <(cut fileB1 -d, -f1-6) <(cut fileA1 -d, -f7-9)> fileD1' –

+0

@JoseRicardoBustosM. Vielen Dank. Ich habe das in einer Datei getestet und es hat funktioniert. Ich habe versucht, dies rekursiv für eine große Anzahl von Dateien mit * fileA1 = find/path/to/folderA -name '* .csv' * und file * fileB1 = find/path/to/folderB -name '* anzuwenden. csv '*, aber ich bekomme einen Syntaxfehler, wenn ich dies auf den Befehl * paste * anwende. – Buzz

Antwort

0

Sie paste und cut für das Swap-Spalten in zwei Dateien verwenden können,

paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7) > fileC1 
paste -d, <(cut fileB1 -d, -f1-6) <(cut fileA1 -d, -f7-9) > fileD1 
Verwandte Themen