Ich muss Hunderte von TXT-Dateien nebeneinander zusammenführen. Ich habe versucht, einige der bereits in den Foren beantworteten Fragen zu verwenden, aber während die Dateien zusammengeführt werden, werden die zweite und dritte (und so weiter) Datei jedes Mal eine Zeile nach unten verschoben. Ich möchte, dass sie ausgerichtet bleiben und alle Dateien die gleiche Anzahl von Zeilen haben (wenn nicht sogar Zeichen in jeder Zeile). Meine Dateien sind durch Kommas getrennt und mein ultimatives Ziel ist es, sie alle für die Datenverarbeitung in Excel zu bringen.
meine Dateien sind
591.txt
CT Analyser, Version: 1.9.3.2
Date and time,25.07.2014 09:56
Operator identity,svy557
Computer name,UT156805
Computation time,00:08:24
Dataset,591_right__rec_tra_voi
Location,D:\Pam Mandible Copy\591\Right\Region1\
583.txt
CT Analyser, Version: 1.9.3.2
Date and time,31.07.2014 15:14
Operator identity,svy557
Computer name,UT156805
Computation time,00:10:04
Dataset,583_left__rec_tra
Location,D:\Pam Mandible Copy\583 Left\Reoriented\
Ich habe so etwas wie das Folgende versucht:
paste 591.txt 593.txt | column -s $'\t' -t
es wird folgendermaßen zusammengeführt (die zweite Datei eine Zeile tiefer, statt Zeilen nebeneinander):
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:55
Operator identity,svy557
Operator identity,svy557
Computer name,UT156805
Computer name,UT156805
Computation time,00:08:24
Computation time,00:08:13
Dataset,591_right__rec_tra_voi
Dataset,583_right__rec_tra_voi
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\583 Right\Region1\
Das macht mich seit ein paar Tagen wahnsinnig und ich wäre für jede Hilfe sehr dankbar. Ich bin ziemlich neu bei UNIX, also versuche ich, genug zu lernen, um dies und dann noch ein paar andere Projekte zu machen, die ähnliche Fähigkeiten erfordern. Die eigentlichen Dateien haben etwa 50 Zeilen und sehen alle so aus, wenn ich versuche, mehr als eine Datei mit etwas wie diesem zu machen:
paste -d '\n' *.txt > new.txt
Die Ergebnisse werden unvorhersehbar
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
Date and time,25.07.2014 09:55
Date and time,25.07.2014 09:55
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:55
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computation time,00:08:13
Computation time,00:08:13
Computation time,00:08:24
Computation time,00:08:24
Computation time,00:08:24
Computation time,00:08:13
Dataset,583_right__rec_tra_voi
Dataset,583_right__rec_tra_voi
Dataset,591_right__rec_tra_voi
Dataset,591_right__rec_tra_voi
Dataset,591_right__rec_tra_voi
Dataset,583_right__rec_tra_voi
Location,D:\Pam Mandible Copy\583 Right\Region1\
Location,D:\Pam Mandible Copy\583 Right\Region1\
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\583 Right\Region1\
Nochmals vielen Dank für alle Hilfe
Antwort1
Ich vermute, dass diese Zeilen Leerzeichen am Ende haben und dadurch ein Zeilenumbruch erfolgt. Haben Sie versucht, den Anfang einer Datei im Oktal-/Hexadezimalformat auszugeben, um zu sehen, ob das der Fall ist?
Sie könnten dann mit einem einfachen sed
Befehl alle Dateien in einem sich wiederholenden Shell-Skript reparieren, bevor Sie beginnen.
Antwort2
Hier liegt es wahrscheinlich daran, dass die Originaldateien Windows-Zeilenumbrüche enthalten. Der Befehl paste
scheint bei Windows-Zeilenumbrüchen in Kombination mit dem Trennzeichen nicht zu funktionieren. Sie können dies überprüfen, indem Sie od
auf die Dateien anwenden. Wenn sie enthalten \r\n
, müssen Sie dies zuerst beheben. Dies kann mit behoben werden dos2unix
.
Ein Check meines Systems:
[stc@se] $ echo -e "foo\r" > a ; echo -e "bar\r" > b
[stc@se] $ od -c a
0000000 f o o \r \n
0000005
[stc@se] $ paste a b
foo bar
[stc@se] $ paste -d"," a b
,bar
Beheben Sie dies mit dos2unix
:
[stc@se] $ dos2unix a b
dos2unix: converting file a to Unix format...
dos2unix: converting file b to Unix format...
[stc@se] $ paste -d"," a b
foo,bar
dos2unix
ist nicht standardmäßig auf allen Linux-Systemen installiert, daher müssen Sie es möglicherweise trotzdem installieren.