2つのawk入力ファイルを持つ配列

2つのawk入力ファイルを持つ配列

2つのファイルがあり、1つは含まれNF=7、もう1つは含まれていますNF=47

$2ファイル内の発生回数を確認する必要がありますNF=7。数が次の場合、次を<=2含む同じファイルから配列を作成する必要があります。arr1[$1]=$1

このタスクには次のコードを使用しました。

awk -F"," '{if(NF==7){arr[$2]++}}END{for(i in a){if(arr[i]<=2){print $0}}}'

2番目のファイル操作の場合は、最初のファイルの操作を2番目のファイルの操作と$1一致させる必要があります。arr[$1]=$1$1

次の例をご覧ください。

ファイル1:

1,111,,,,,,
2,111,,,,,,
3,100,,,,,,
4,111,,,,,,

ファイル2:

1,799,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
2,899,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
3,999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

出力:

3,999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

答え1

あなたは比較することができますNRそしてFNR最初のファイル処理と後続のファイル処理を区別します。これはFNR、リセットがファイル基準NRではなく実行回数基準であるためです。したがって、最初のファイルが処理されたときにのみ条件が満たされますNR==FNR

「短い」ファイルを処理するには、まず次のことを行う必要があります。

awk -F, 'NR==FNR{mapper[$1]=$2;counter[$2]++}...'

次に、条件に合ったときに印刷されるように「より長い」ファイルを処理します。

awk -F, 'NR!=FNR&&counter[mapper[$1]]<=2'

2つを組み合わせると、次のようになります。

awk -F, 'NR==FNR{mapper[$1]=$2;counter[$2]++}NR!=FNR&&counter[mapper[$1]]<=2'

デフォルトでは、選択基準が一致awkすると行全体が印刷されるため、これを指定できますNR!=FNR&&counter[mapper[$1]]<=2

関連情報