한 열은 고유하지만 다른 열은 동일한 행을 얻는 방법은 무엇입니까?

한 열은 고유하지만 다른 열은 동일한 행을 얻는 방법은 무엇입니까?

첫 번째, 세 번째, 네 번째 열이 동일할 때 두 번째 열을 기반으로 고유한 행을 얻는 awk 솔루션을 찾고 있습니다.

제한 요인:

  1. 열 3과 4의 행은 동일해야 합니다(세 번째 열에 정렬된 두 개의 연속 행).
  2. 1이 true인 경우 열 1이 1단계의 행과 동일한지 확인하세요.
  3. 그런 다음 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) }'

관련 정보