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
。