最初、3番目、4番目の列が同じ場合、2番目の列に基づいて一意の行を取得するawkソリューションを探しています。
制限要因:
- 列3と4の行は同じでなければなりません(3番目の列に並べられた2つの連続行)。
- 1がtrueの場合、列1がステップ1の行と同じであることを確認してください。
- 次に、ステップ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) }'