1

主キーとしてIPアドレスを持つ2つのファイルがあります。ファイル 2 には、異なる情報を持つサブセットのみが含まれています。bash を使用して、最初のファイルに 2 列目を追加したいと思います。

ファイル1:

192.168.1.1;hosta;aabbccddeef0
192.168.1.2;hostb;aabbccddeef1
192.168.1.3;hostc;aabbccddeef2

ファイル2:

192.168.1.2;differentHostname;

cat file2 | cut -d\; -f1; do grep -w $addr file1 ...file2 からホスト名にアクセスできないため、for addr in を使用した私のアプローチは機能しません。

何か案は?

4

2 に答える 2

8

これは何をするかjoinです:

$ join -a1 -t';' <(sort file1) <(sort file2)    
192.168.1.1;hosta;aabbccddeef0
192.168.1.2;hostb,aabbccddeef1;differentHostname;
192.168.1.3;hostc,aabbccddeef2

注:joinソートされた順序でファイルが必要です。

-o次のオプションを使用して、出力の順序を指定できます。

$ join -a1 -t';' -o 1.1 1.2 2.2 1.3 <(sort file1) <(sort file2)
192.168.1.1;hosta;;aabbccddeef0
192.168.1.2;hostb;differentHostname;aabbccddeef1
192.168.1.3;hostc;;aabbccddeef2
于 2013-03-06T09:01:55.310 に答える
0
awk -F";" -v OFS=";" 'FNR==NR{a[$1]=$2;next}($1 in a){$(NF+1)=a[$1]}1' file2 file1

テスト済み:

> awk -F";" -v OFS=";" 'FNR==NR{a[$1]=$2;next}($1 in a){$(NF+1)=a[$1]}1' temp2 temp
192.168.1.1;hosta;aabbccddeef0
192.168.1.2;hostb;aabbccddeef1;differentHostname
192.168.1.3;hostc;aabbccddeef2
> 
于 2013-03-06T09:25:19.040 に答える