別の行にファイルをマージする方法は?

別の行にファイルをマージする方法は?

別の行にあるファイルをマージする最速のコマンドライン方法は何ですか?たとえば、次の2つのファイルがあります。

a.txt:

foo  
bar
foobar

b.txt

foo
foobar
line
by
bar

次の出力を取得したい。

foo
bar
foobar
line
by

上記の例のようにファイルをマージする簡単な方法はありますか? (行の順序は重要ではありません)

答え1

$ sort -u a.txt b.txt
bar
by
foo
foobar
line

これにより、2つのファイルの(結合された)内容がソートされ、重複した行が削除されます。欠点は、1行がファイルに重複している場合、その行も削除されることです。

結果を書き込むには、c.txt次を使用します。

sort -u -o c.txt a.txt b.txt

または標準リダイレクト

sort -u a.txt b.txt >c.txt

答え2

awk seenファイルをソートしたくない場合は、次のようにします。

$ awk '!seen[$0]++' a.txt b.txt
foo  
bar
foobar
line
by

答え3

目的の出力によれば、2つのファイルを一意の文字列にマージするだけでよいと思います。

この場合、catおよびこれを行うことができますsortuniq

cat a.txt b.txt | sort | uniq > c.txt

cat両方のファイルの内容を開きます。

sort出力をアルファベット順に並べ替える

uniq一意の文字列のみを一覧表示

> c.txtすべての出力を新しいファイルに入れます。c.txt

関連情報