2

共通要素の 2 つのファイルの 2 つのフィールドを比較し、共通要素を出力するには、次のようにします。

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

これは、2 つのファイルの列 2 を比較します。

今、私はそのようなファイルを6つ持っています。awk を使用して、これら 6 つのファイルの列 2 を共通要素と比較し、共通要素を出力するにはどうすればよいですか? 各ファイルには 2 つのフィールドしかありません。

私の期待は、共通要素のみの出力です。

ありがとうございました。

4

1 に答える 1

2

各ファイルの列 2 の値がファイル内で一意であれば、これで十分です。

awk '{a[$2]++;} END {for (i in a) if (a[i] > 1) print i;}' \
    file1 file2 file3 file4 file5 file6

(「複数のファイルに表示」したい場合は、「すべてのファイルに表示」したい場合に変更> 1します)。== 6

列 2 の値が特定のファイルで繰り返される可能性がある場合は、おそらく次のように、もう少し頑張る必要があります。

awk '{ if (f[$2] != FILENAME) a[$2]++; f[$2] = FILENAME; }
     END { for (i in a) if (a[i] > 1) print i; }' \
     file1 file2 file3 file4 file5 file6

配列fは、どのファイルが の値を最後に識別したかの記録を保持します$2。それが現在のファイルでない場合は、配列のカウントをインクリメントaし、現在のファイルが の値を識別したことを記録します$2for前と同じように、ループ内の条件を微調整して、出力される内容を調整します。

于 2013-10-13T16:20:27.287 に答える