このようなファイルがあります。
12345 X678GHR 0 ADD
23445 HGT6787 1 ADD
12345 X678GHR 0 REM
67894 OIY5678 0 ADD
12345 OIY5678 0 ADD
12345 X678GHR 1 ADD
後で追加して削除した行を削除するには、ファイルの行を比較する必要があります。したがって、出力は次のようになります。
23445 HGT6787 1 ADD
67894 OIY5678 0 ADD
12345 OIY5678 0 ADD
12345 X678GHR 1 ADD
その後、ファイルに追加および削除された履歴は消去されます。
更新:また、2列と3列の間に削除されたレコードが一致することを確認する必要がありました。私の元のファイルでは、区切り文字は空白ではありません。閉じカッコ「)」です。
助けてください。私はUNIXを初めて使用します。
ベストアンサー1
項目の順序を保証する必要がない場合は、以下を提供してください。
$ cat file
12345)X678GHR)0)ADD
23445)HGT6787)1)ADD
12345)X678GHR)0)REM
67894)OIY5678)0)ADD
12345)OIY5678)0)ADD
12345)X678GHR)1)ADD
次は
$ awk -F ')' '
$NF == "ADD" {lines[$1 FS $2 FS $3] = $0}
$NF == "REM" {delete lines[$1 FS $2 FS $3]}
END {for(i in lines) print lines[i]}
' file
12345)X678GHR)1)ADD
67894)OIY5678)0)ADD
23445)HGT6787)1)ADD
12345)OIY5678)0)ADD
本当に順序を維持する必要がある場合は、ファイルを2回渡すだけです。
$ awk -F ')' '
NR == FNR {if($NF == "REM") rem[$1 FS $2 FS $3]; next}
!($1 FS $2 FS $3 in rem)
' file file
23445)HGT6787)1)ADD
67894)OIY5678)0)ADD
12345)OIY5678)0)ADD
12345)X678GHR)1)ADD