
何百もの.txtファイルを並べてマージする必要があります。フォーラムで回答された質問のいくつかを使用しようとしましたが、ファイルがマージされている間、2番目と3番目(等)のファイルは毎回1行下に移動します。私はそれらがソートされたままで、すべてのファイルが同じ数の行を持つことを望みます(各行の文字ではない場合)。私のファイルはカンマで区切られており、最終的な目標はファイルをすべてデータ処理にうまくすることです。
私のファイルは
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番目のファイルは互いに隣り合うのではなく下の行にあります)。
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の改行文字が含まれていることです。このコマンドは、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システムにデフォルトでインストールされているわけではないので、インストールする必要があります。