複数のファイルを 1 つのファイルにマージする必要がある場合が多々あります。 それは、以前に 1 つのファイルを複数のファイルに分割し、それらをマージして戻したい場合、または、1 つにマージしたい複数のログ ファイルがある場合などです。

Linuxでは、複数のファイルを1つのファイルに結合するコマンドはcatと呼ばれます。 デフォルトのcatコマンドは、複数のファイルを連結して標準出力に出力します。

ファイルをマージするもうひとつの便利なユーティリティは join と呼ばれ、共通のフィールドに基づいて 2 つのファイルの行を結合することができます。 しかし、これは一度に 2 つのファイルに対してのみ動作し、私はこれを使用するのが非常に面倒だと感じています。 この投稿では、主に cat コマンドを取り上げます。

Merge Multiple files into one in order

cat コマンドは、ファイル名のリストを引数として受け取ります。 コマンドラインでファイル名を指定する順序は、ファイルがマージまたは結合される順序を決定します。 つまり、file1.txt、file2.txt、file3.txt などの名前のファイルが複数ある場合、

bash$ cat file1.txt file2.txt file3.txt file4.txt > ./mergedfile.txt

上のコマンドは、file1.txt の末尾に file2.txt の内容を付加する。 file1.txt と file2.txt のマージされた内容の最後に file3.txt の内容が追加され、…マージされたファイル全体が mergedfile.txt という名前で現在の作業ディレクトリに保存されます。

多くの場合、非常に多くのファイルを持っていてすべてのファイル名を入力することが困難になっているかもしれません。

bash$ cat file*.txt my*.txt > mergedfile.txt

これは、現在のディレクトリにある file という名前で始まり、拡張子が txt であるすべてのファイルの後に my という名前で始まり、拡張子が txt であるファイルをマージするものです。 ファイルの順序を保持したい場合は、正規表現を使用することに注意する必要があります。 正規表現を間違えると、ファイルがマージされる正確な順序に影響します。

ファイルが希望する正確な順序でマージされることを確認する簡単な方法は、ls や find などの別のファイル一覧プログラムの出力を使用し、それを cat コマンドにパイプで接続することです。 まず、正規表現を使って find コマンドを実行し、ファイルの順序を確認します…

bash$ find . -name "file*.txt" -o -name "my*.txt"

このようにすると、ファイルの順序が正しく表示されるので、それを確認したり、希望に合うように変更することができます。 7580>

bash$ find . -name "file*.txt" -o -name "my*.txt" | xargs cat > ./mergedfile.txt

正規表現を使用して複数のファイルを 1 つのファイルにマージするとき、特にパイプで出力ファイルがあまり目立たない場合、正規表現がマージされるファイルのファイル名と一致しないことを確認します。 一致した場合、通常 cat コマンドは「入力ファイルが出力ファイルである」というメッセージを出してエラーにするのがかなり上手です。

Merge Two Files at Arbitrary Location

2 つのファイルを、ファイルのコンテンツ内の特定の場所でマージしたいことがあるかもしれません。 これは、ファイル内の特定の位置で 1 つのファイルのコンテンツを別のファイルに挿入するプロセスに似ています。

ファイル サイズが小さく管理可能である場合、vi はこれを行うための優れたエディター ツールです。 そうでない場合は、最初にファイルを分割し、次に結果のファイルを順番にマージするオプションがあります。 最も簡単な方法は、行番号に基づいて、他のファイルを挿入したい場所で正確にファイルを分割することです。

bash$ split -l 1234 file1.txt

あなたの要件に応じて、任意の数の出力ファイルにファイルを分割することができます。 上記の例では、ファイルfile1.txtを1234行のチャンクに分割します。 xaa、xab、xac などの名前の 2 つ以上のファイルになる可能性があります。前述のように、同じ cat コマンドを使用してすべてのファイルをマージできます。 これは、いくつかの大きなログ ファイルを分析する必要があるが、特定のメッセージまたは行にのみ興味がある場合に、特に便利です。 そこで、いくつかのログファイルから何らかの条件に基づいて重要なログメッセージを抽出し、メッセージの順序を維持または保存しながら別のファイルに保存する必要があります。

cat コマンドと grep コマンドを使用してこれを行うことができますが、grep コマンドのみでも行うことができます。 正規表現を使ってログファイルを照合する際には、先ほどの記事で述べたように、ログファイルの順番を確認する必要があります

コメントを残す

メールアドレスが公開されることはありません。