我必須並排合併數百個 .txt 檔案。我一直在嘗試使用論壇中一些已回答的問題,但是雖然文件確實合併,但第二個和第三個(依此類推)文件每次都會向下移動一行。我希望它們保持對齊,所有文件都具有相同的行數(如果不是每行中的字元)。我的文件用逗號分隔,我的最終目標是讓它們都擅長資料處理。
我的文件是
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\
我嘗試過類似以下的操作:
paste 591.txt 593.txt | column -s $'\t' -t
它像這樣合併(第二個文件在下面一行,而不是彼此相鄰的行):
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\
這幾天一直讓人抓狂,任何幫助都將不勝感激,我對 UNIX 還很陌生,所以我正在努力學習足夠的知識來完成這項工作,然後是其他一些需要類似技能的項目。實際文件大約有 50 行,如果我嘗試使用以下內容執行多個文件,那麼所有文件看起來都是這樣的:
paste -d '\n' *.txt > new.txt
結果變成不可預測
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\
再次感謝所有的幫助
答案1
我懷疑這些行上有尾隨空格,這將其推入環繞狀態。您是否嘗試過以八進制/十六進制轉儲文件的開頭以查看是否是這種情況?
然後,您可以sed
在開始之前使用一個簡單的命令來修復循環 shell 腳本中的所有檔案。
答案2
這裡的情況可能是原始檔案包含 Windows 換行符。該命令paste
似乎與 Windows 換行符和分隔符號結合使用時出錯。您可以透過使用od
文件來檢查這一點。如果它包含\r\n
,您首先需要解決這個問題。可以使用 來修復此問題dos2unix
。
檢查我的系統:
[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
解決這個問題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
預設情況下,並非所有 Linux 系統上都安裝了它,因此您可能仍需要安裝它。