以下のファイルがあります
1,1230,add
1,1235,remove
2,1240,add
2,1245,remove
3,1250,add
4,1255,remove
最初のフィールドに一意の値を持つ行を印刷したいです。そしてここで3番目のフィールドは次のとおりですadd
。この例の予想出力は次のとおりです。
3,1250,add
または最初の列のみ、つまり
3
以下のコマンドは別のレコードを提供しますが、3番目の列が「追加」されていることを確認してから出力を印刷したいと思います。
awk -F ',' 'print $1' filename | uniq -u
ベストアンサー1
この場合、私はデュアルパスアプローチを考えました。
awk -F',' 'NR==FNR{seen[$1]++;next} $3=="add" && seen[$1]==1' file.txt file.txt
これにより、入力ファイルが2回処理されます(したがって、パラメータとして2回宣言されます)。
- 最初のパスでは、
NR
グローバル行カウンターはFNR
ファイルごとの行カウンターと同じで、最初のフィールドのこの特定の値が見つかる頻度のみを計算します。それ以外の場合は、処理(コマンドステートメントnext
)をすぐにスキップします。 - 2番目のパスでは、3番目のフィールドが同じであること、および1番目のフィールドが1
add
回だけ表示されることを確認します。その場合は、その行を印刷します(両方の条件で評価されるためtrue
)。