別の行にあるファイルをマージする最速のコマンドライン方法は何ですか?たとえば、次の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
およびこれを行うことができますsort
。uniq
cat a.txt b.txt | sort | uniq > c.txt
cat
両方のファイルの内容を開きます。
sort
出力をアルファベット順に並べ替える
uniq
一意の文字列のみを一覧表示
> c.txt
すべての出力を新しいファイルに入れます。c.txt