如何获取一列唯一但另一列相同的行?

如何获取一列唯一但另一列相同的行?

我正在寻找一个 awk 解决方案,当第一列、第三列和第四列相同时,它会根据第二列获取唯一的行。

限制条件:

  1. 第 3 列和第 4 列的行必须相同(两个连续的行在第三列上排序)
  2. 如果 1 为 true,则检查第 1 列与步骤 1 中的那些行是否相同。
  3. 然后检查步骤 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) }'

相关内容