使用貼上並排合併多個文字檔案時出現問題

使用貼上並排合併多個文字檔案時出現問題

我必須並排合併數百個 .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 系統上都安裝了它,因此您可能仍需要安裝它。

相關內容