web-dev-qa-db-ja.com

複数のファイルの内容を1つのファイルに追加する方法

5ファイルの内容をそのまま1ファイルにコピーしたい。各ファイルにcpを使ってやってみました。しかし、それは前のファイルからコピーされた内容を上書きします。私も試した

paste -d "\n" 1.txt 0.txt

それはうまくいきませんでした。

各テキストファイルの末尾にスクリプトで改行を追加します。

例えば。ファイル1.txt、2.txt、3.txt。 1,2,3の内容を0.txtに入れる

どうすればいいのですか ?

144
Steam

あなたの出力ファイルにシェルリダイレクション(>)を付けたcat(連結の略)コマンドが必要です。

cat 1.txt 2.txt 3.txt > 0.txt
270
radical7

私のようにまだこの記事に出くわしているあなたのためのもう一つの選択肢は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

他の答えで説明されているように、出力ファイルの最後にカタログの内容を追加してください。

85
mopo922

特定の種類の出力がある場合は、次のようにします。

cat /path/to/files/*.txt >> finalout.txt
37
Eswar Yaganti

すべてのファイルが単一のディレクトリにある場合は、単純に実行できます。

cat * > 0.txt

ファイル1.txt、2.txt、..は0.txtに入ります。

15
Pooja
for i in {1..3}; do cat "$i.txt" >> 0.txt; done

952個のファイルを1つにまとめる必要があるため、このページを見つけました。あなたがたくさんのファイルを持っているなら、私はこれがはるかに良く働くことがわかった。これはあなたが必要とするたくさんの数のためにループをするでしょうそして0.txtの終わりに追加するために>>を使ってそれぞれ一つずつ。

9
freddythunder

すべてのファイルに同じ名前が付けられている場合は、次のようにします。

cat *.log >> output.log
6
AeaRy

別のオプションは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.txtwmerge.txt!ではない)も書くことに注意してください。ファイル名との混同を避けるためにw"merge.txt"を、そしてサイレント出力のために-nを使うことができます。

もちろん、ファイルリストをワイルドカードで短くすることもできます。たとえば、上記の例のように番号が付けられたファイルの場合は、次のようにブレースで範囲を指定できます。

sed -n w"merge.txt" {1..3}.txt
4
Fran

元のファイルに印刷不可能な文字が含まれていると、catコマンドを使用したときにそれらの文字が失われます。 'cat -v'を使用すると、non-printableは表示可能な文字列に変換されますが、出力ファイルには元のファイルの実際のnon-printables文字は含まれません。少数のファイルでは、印刷以外の文字を処理するエディタ(たとえばvim)で最初のファイルを開くという方法もあります。次にファイルの最後まで移動して、 ":r second_file_name"と入力します。これは、非印刷文字を含む2番目のファイルを取り込みます。追加ファイルについても同じことができます。すべてのファイルが読み込まれたら、 ":w"を入力します。その結果、最初のファイルには最初に行ったことと、読み込んだファイルの内容が含まれるようになります。

2
B.A.Cooper

ファイルに ヘッダ が含まれていて、それらを出力ファイルから削除したい場合は、次のようにします。

for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done
2
brunocrt

3つのファイルの内容を1つのファイルに追加したい場合は、次のコマンドが適しています。

cat file1 file2 file3 | tee -a file4 > /dev/null

それはすべてのファイルの内容をfile4に結合し、コンソール出力を/dev/nullに投げます。

1
Ajit K'sagar