我正在寻找一个 awk 解决方案,当第一列、第三列和第四列相同时,它会根据第二列获取唯一的行。
限制条件:
- 第 3 列和第 4 列的行必须相同(两个连续的行在第三列上排序)
- 如果 1 为 true,则检查第 1 列与步骤 1 中的那些行是否相同。
- 然后检查步骤 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) }'