両方のファイルを巧妙にマージする方法はありますか? [コピー]

両方のファイルを巧妙にマージする方法はありますか? [コピー]

いくつかの行が同じ2つのファイルがあります。

ファイルA:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}

ファイルB:

command 5
command 3
command 1{
    some code lines
}

私は以下を含む最終ファイルが欲しいです:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}
command 5

行の順序は重要ではありません。これを行うための既存のツール(またはコマンド)はありますか?

答え1

私はこれがコメントの答えでなければならないことを知っています。

これを行うためのツールがあるかどうか覚えていません。しかし、!ファイルを分類し、およびを使用してsort操作を実行すると、uniq正確な効果が得られます。

cat A B | sort | uniq

これにより、2つのファイルの内容が結合され、次に行がソートされ、重複した内容が削除されます。

結果出力:

command 1
command 2
command 3
command 4
command 5

答え2

私が知る限り、あなたが示した方法でファイルをマージするためのツールはありません。ほとんどのマージ/比較ツールは、2つのファイルが異なる場所に一緒に配置できることをツールが知ることができるように、行の周りにある程度のコンテキストを持つことによって機能します。

あなたが示すものには実際の文脈がないので、これらのツールがどのようにこれを行うことができるかわかりません。

答え3

次のことができます。

sed -e 's/_/_u/g;s/%/_p/g;/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr '%\n' '\n%' |
  sed 's/%//g;s/_p/%/g;s/_u/_/g'

ファイルにその%文字が含まれていない場合は、次のように単純化できます。

sed -e '/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr -d '\n' |
  tr % '\n'

関連情報