14個のファイルがあり、すべて1つのテキストで構成されています。私はそれらを一つにまとめたいと思います。どうすればいいですか?
答え1
技術的にはcat
("connect")実行する必要がありますが、ほとんどの人はファイルを標準出力に出力するためにのみ使用します。複数のファイル名を指定すると順番に出力され、新しいファイルにリダイレクトできます。すべてのファイルであれば使用できます./*
(または/path/to/directory/*
そのディレクトリにない場合)。シェルはそれをすべてのファイルに拡張します。ファイル名(デフォルトでは隠しファイルを除く)。
$ cat ./* > merged-file
globを拡張するために、csh
またはシェルを使用していないことを確認してください。tcsh
後ろにmerged-file
以前に存在しなかった出力の機能をオンにしますmerged-file
。そうしないと、ファイルシステムをいっぱいにする無限ループが発生する可能性があります。
ファイルのリストは語彙順にソートされます。を使用している場合は、zsh
glob修飾子を使用して順序を変更できます(番号、年齢、サイズなど)。
サブディレクトリにファイルを含めるには、次を使用します。
find . ! -path ./merged-file -type f -exec cat {} + > merged-file
ただし、ファイルのリストは並べ替えられず、隠しファイルが含まれていることに注意してください。-type f
これは以下に限定されます。定期的な他の種類のファイルを含める可能性が低いからです。 GNUを使用すると、通常のファイルへのシンボリックリンクも含めるようにfind
変更できます。-xtype f
zshシェルを使用して、
cat ./**/*(-.) > merged-file
同じことを行います((-.)
実装と同じです-xtype f
)、ソートされたリストを提供し、隠しファイルを除外します(D
再インポートするには修飾子を追加します)。zargs
この問題を解決するために使用できますパラメータリストが長すぎます。間違い。
答え2
ファイルが同じディレクトリにない場合は、接続する前にfindコマンドを使用できます。
find /path/to/directory/ -name *.csv -print0 | xargs -0 -I file cat file > merged.file
ファイルがすでにソートされていて分析のためにマージしたい場合に便利です。
携帯性が向上しました。
find /path/to/directory/ -name *.csv -exec cat {} + > merged.file
ファイルの順序が維持される場合もありません。
答え3
注文する
$ cat * > merged-file
実際、接続に「マージされたファイル」を含むランアウェイファイルを生成する望ましくない副作用があります。この問題を解決するには、マージされたファイルを別のディレクトリに書き込むことができます。
$ cat * > ../merged-file
または、パターンマッチングを使用してマージされたファイルを無視します。
$ cat *.txt > merged-file
答え4
次のようにファイルを指定してpattern
から、すべてのファイルをマージできます。
cat *pattern* >> mergedfile