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
私のようにまだこの記事に出くわしているあなたのためのもう一つの選択肢はfind -exec
を使うことです:
find . -type f -name '*.txt' -exec cat {} + >> output.file
私の場合、私はfind
を使用することを選択したので、複数のサブディレクトリを調べるより堅牢なオプションが必要でした。それを分解する:
find .
現在の作業ディレクトリ内を見てください。
-type f
ディレクトリなどではなく、ファイルだけに関心がある.
-name '*.txt'
結果セットを名前で省略
-exec cat {} +
結果ごとにcatコマンドを実行してください。 "+"はcat
のインスタンスが1つだけ生成されることを意味します(thx @gniourf_gniourf)
>> output.file
他の答えで説明されているように、出力ファイルの最後にカタログの内容を追加してください。
特定の種類の出力がある場合は、次のようにします。
cat /path/to/files/*.txt >> finalout.txt
すべてのファイルが単一のディレクトリにある場合は、単純に実行できます。
cat * > 0.txt
ファイル1.txt、2.txt、..は0.txtに入ります。
for i in {1..3}; do cat "$i.txt" >> 0.txt; done
952個のファイルを1つにまとめる必要があるため、このページを見つけました。あなたがたくさんのファイルを持っているなら、私はこれがはるかに良く働くことがわかった。これはあなたが必要とするたくさんの数のためにループをするでしょうそして0.txtの終わりに追加するために>>を使ってそれぞれ一つずつ。
すべてのファイルに同じ名前が付けられている場合は、次のようにします。
cat *.log >> output.log
別のオプションはsed
です:
sed r 1.txt 2.txt 3.txt > merge.txt
それとも….
sed h 1.txt 2.txt 3.txt > merge.txt
それとも….
sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here
またはリダイレクトせずに...
sed wmerge.txt 1.txt 2.txt 3.txt
最後の行にmerge.txt
(wmerge.txt
!ではない)も書くことに注意してください。ファイル名との混同を避けるためにw"merge.txt"
を、そしてサイレント出力のために-n
を使うことができます。
もちろん、ファイルリストをワイルドカードで短くすることもできます。たとえば、上記の例のように番号が付けられたファイルの場合は、次のようにブレースで範囲を指定できます。
sed -n w"merge.txt" {1..3}.txt
元のファイルに印刷不可能な文字が含まれていると、catコマンドを使用したときにそれらの文字が失われます。 'cat -v'を使用すると、non-printableは表示可能な文字列に変換されますが、出力ファイルには元のファイルの実際のnon-printables文字は含まれません。少数のファイルでは、印刷以外の文字を処理するエディタ(たとえばvim)で最初のファイルを開くという方法もあります。次にファイルの最後まで移動して、 ":r second_file_name"と入力します。これは、非印刷文字を含む2番目のファイルを取り込みます。追加ファイルについても同じことができます。すべてのファイルが読み込まれたら、 ":w"を入力します。その結果、最初のファイルには最初に行ったことと、読み込んだファイルの内容が含まれるようになります。
ファイルに ヘッダ が含まれていて、それらを出力ファイルから削除したい場合は、次のようにします。
for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
3つのファイルの内容を1つのファイルに追加したい場合は、次のコマンドが適しています。
cat file1 file2 file3 | tee -a file4 > /dev/null
それはすべてのファイルの内容をfile4に結合し、コンソール出力を/dev/null
に投げます。