貼り付けを使用して多数のテキストファイルを並べて結合する際の問題

貼り付けを使用して多数のテキストファイルを並べて結合する際の問題

数百の .txt ファイルを並べて結合する必要があります。フォーラムで既に回答されている質問のいくつかを使用しようとしましたが、ファイルは結合されますが、2 つ目、3 番目 (以降) のファイルは毎回 1 行下に移動します。すべてのファイルの行数 (各行の文字数ではない場合) が同じになるように、ファイルを揃えたままにしておきたいです。ファイルはカンマで区切られており、最終的な目標は、すべてのファイルを Excel でデータ処理できるようにすることです。

私のファイルは

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

次のように結合されます (2 番目のファイルは隣り合う行ではなく、1 行下になります)。

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

これらの行の末尾にスペースがあり、それがラップアラウンドを引き起こしているのではないかと思います。ファイルの先頭を 8 進数/16 進数でダンプして、それが当てはまるかどうかを確認してみましたか?

その後、開始する前に、簡単なsedコマンドを使用して、ループするシェル スクリプト内のすべてのファイルを修正できます。

答え2

ここでおそらく問題となるのは、元のファイルに Windows の改行が含まれていることです。コマンドは、区切り文字と組み合わせた Windows の改行で問題が発生するようです。ファイルで をpaste使用してこれを確認できます。 が含まれている場合は、まずこれを修正する必要があります。これを修正するには、 を使用します。od\r\ndos2unix

私のシステムのチェック:

[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 システムにデフォルトでインストールされるわけではないので、インストールする必要がある場合があります。

関連情報