awkの

2017-03-06 26 views
0

で二つの大きなファイルを比較し、私は2つのファイルを比較するためのリンクを以下から参照を取った:ファイル2の1列目はファイル1で見つかった場合には、ファイル2の2列を出力します Compare files with awkawkの

awk 'NR==FNR{a[$1];next}$1 in a{print $2}' file1 file2 

しかし、私の要件は少し異なります。ファイル2の第1列が連想配列で見つかった場合(file1の第1列で構築された)、file1の第2列を印刷する方法は?これにより

答えて

1

:あなたは、配列aの各配列要素に値を割り当てるこの方法では

awk 'NR==FNR{a[$1]=$2;next}$1 in a{print a[$1]}' file1 file2 

。 フィールドがfoo barの行については、実際にはa[foo]=barを作成します。
後でコマンド{print a[foo]}を与えた場合、それはバーを表示しますが(それが値を割り当てられている)

以前{a[$1];next}は名前aとインデックス$1持つ配列を作成しますが、値はnullです。 a[$1]="".

awkは$1 in a{print something}を使用して配列内のインデックスを簡単に検索できるので、awkはすべての点で機能します。これはawk if thenのショートカットです。 {if ($1 in a) {print something}}と同じです。これについての大きな点は、部分$1 in aは配列aのインデックスであり、配列の値ではないことを意味します。

+0

「a [$ 1] = $ 2;」と説明できますか?ステップ?私はあなたがしていることを得ることができません。しかし、あなたのソリューションは私のために働いた。 –

+0

@Spartacus今はっきりしていますか?配列に代入してから配列を出力するのは単なる値です。 –

+0

はい、どうもありがとうございます –