5つのファイルの内容をそのまま1つのファイルにコピーしたい。ファイルごとにcpを使ってやってみました。ただし、それは前のファイルからコピーされた内容を上書きします。私も試しました
paste -d "\n" 1.txt 0.txt
そしてそれはうまくいきませんでした。
スクリプトで各テキスト ファイルの末尾に改行を追加する必要があります。
例えば。ファイル 1.txt、2.txt、3.txt。1,2,3の内容を0.txtに入れる
どうすればいいのですか ?
出力ファイルへのcat
シェルリダイレクト( )を使用した(連結の略)コマンドが必要です>
cat 1.txt 2.txt 3.txt > 0.txt
for i in {1..3}; do cat "$i.txt" >> 0.txt; done
952 個のファイルを 1 つに結合する必要があったため、このページを見つけました。多くのファイルがある場合、これははるかにうまく機能することがわかりました。これは、必要な数だけループを実行し、>> を使用してそれぞれを cat し、0.txt の末尾に追加します。
編集:
コメントで取り上げられたように:
cat {1..3}.txt >> 0.txt
また
cat {0..3}.txt >> all.txt
Another option is sed
:
sed r 1.txt 2.txt 3.txt > merge.txt
Or...
sed h 1.txt 2.txt 3.txt > merge.txt
Or...
sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here
Or without redirection ...
sed wmerge.txt 1.txt 2.txt 3.txt
Note that last line write also merge.txt
(not wmerge.txt
!). You can use w"merge.txt"
to avoid confusion with the file name, and -n
for silent output.
Of course, you can also shorten the file list with wildcards. For instance, in case of numbered files as in the above examples, you can specify the range with braces in this way:
sed -n w"merge.txt" {1..3}.txt
元のファイルに印刷できない文字が含まれている場合、cat コマンドを使用するとそれらの文字は失われます。'cat -v' を使用すると、印刷できない文字列は表示可能な文字列に変換されますが、出力ファイルには元のファイルの実際の印刷できない文字が含まれていません。ファイルの数が少ない場合、別の方法として、非印刷文字を処理するエディター (vim など) で最初のファイルを開くこともできます。次に、ファイルの一番下まで移動して、「:r second_file_name」と入力します。これにより、非印刷文字を含む 2 番目のファイルが取り込まれます。追加のファイルについても同じことができます。すべてのファイルを読み込んだら、「:w」と入力します。最終的な結果として、最初のファイルには、最初に行った内容に加えて、読み込まれたファイルの内容が含まれるようになります。