ある列は一意ですが、他の列は同じ行を取得する方法は何ですか?

ある列は一意ですが、他の列は同じ行を取得する方法は何ですか?

最初、3番目、4番目の列が同じ場合、2番目の列に基づいて一意の行を取得するawkソリューションを探しています。

制限要因:

  1. 列3と4の行は同じでなければなりません(3番目の列に並べられた2つの連続行)。
  2. 1がtrueの場合、列1がステップ1の行と同じであることを確認してください。
  3. 次に、ステップ2の行に同じ列2の値があることを確認し、そうでない場合はその行(2行)を印刷し、そうでない場合は2行を印刷しません。

入力ファイル:-

AB|abcd|0001|Active
AB|efgh|0001|Active
AB|efgh|0001|Closed
CD|xyz|0002|Active
CD|pqr|0002|Active
EF|xyz|0003|Active
EF|xyz|0003|Closed

出力:-

AB|abcd|0001|Active
AB|efgh|0001|Active
CD|xyz|0002|Active
CD|pqr|0002|Active

以下のコードを試しましたが、同じ$ 2の値を提供します。

awk -F'|' '
  BEGIN{OFS=FS}
  $4 ~ /Active/ && a[$3]++ && $2 != c {
    print r ORS $0
  }
  {r=$0; c=$2}' <(sort -k3,3 file)

ベストアンサー1

<infile sort -t'|' -k3,4 -k1,2 |
 awk -F'|' '
     ($3==p[3] && $4==p[4] && $1==p[1] && $2!=p[2] ) && 
      NR>1{ print buf ORS $0; next }
     { buf=$0; split($0, p) }'

おすすめ記事