目的:ファイル内の公開鍵を使用して2つのファイルの内容をマージします。
file1.txt
=========
key1 11
key2 12
key3 13
file2.txt
=========
key2 22
key3 23
key4 24
key5 25
Expected Output :
==================
key1 11
key2 12 22
key3 13 23
key4 24
key5 25
試みた方法:
join
注文する:join -a 1 -a 2 file1.txt file2.txt ## full outer join
awk
:awk 'FNR==NR{a[$1]=$2;next;}{ print $0, a[$1]}' 2.txt 1.txt
方法2は、完全外部結合の代わりに右外部結合を生成する。
key1 11
key2 12 22
key3 13 23
完全な外部結合を生成するには、方法2で何を修正する必要がありますか?
答え1
私の解決策は以下を使用しますjoin
。
join -a1 -a2 -1 1 -2 1 -o 0,1.2,2.2 -e "NULL" file1 file2
awk
私は大容量のファイルの組み合わせについてはよくわかりませんjoin
。
key1 11 NULL
key2 12 22
key3 13 23
key4 NULL 24
key5 NULL 25
答え2
私の解決策はawk:
awk '{a[$1]=a[$1]" "$2} END{for(i in a)print i, a[i]}' file1.txt file2.txt
keyn
indexを使用してsecond fields
各行をその行に追加します a[keyn]
(を使用)space
。最後に、すべてのindices
合計を印刷しますarray element
。
出力:
AMD$ awk '{a[$1]=a[$1]" "$2} END{for(i in a)print i, a[i]}' file1.txt file2.txt
key1 11
key2 12 22
key3 13 23
key4 24
key5 25
答え3
を使用してawk
次のことを試してください。
awk '{a[$1]=($1 in a)?a[$1]" "$2:$2};END{for(i in a)print i,a[i]}' file1 file2
join
大きなファイルの場合、メソッドは印刷する前にすべてのファイルの内容をメモリに保存するため、代わりにawk
メソッドを使用する必要がありますawk
。
答え4
join
大文字の綴りが間違っているにもかかわらず、最初の項目は大丈夫です。
$>join -a 1 -a 2 file1.txt file2.txt
key1 11
key2 12 22
key3 13 23
key4 24
key5 25