入力.txt
-------
Database alias = ABC
Node name = node01
Hostname = hostnode01
Service name = 12345
-------
Hostname = hostnode01
Service name = 12345
-------
Database alias = PQR
Node name = node01
Hostname = hostnode01
Service name = 12345
-------
Hostname = hostnode01
Service name = 12345
-------
Database alias = XYZ ......
期待される出力
-------
Database alias = ABC
Node name = node01
Hostname = hostnode01
Service name = 12345
-------
Database alias = PQR
Node name = node01
Hostname = hostnode01
Service name = 12345
-------
Database alias = XYZ ......
ホスト名とサービス名(重複している場合)の重複値を削除するか、その間'-------
に2行がある場合は「。」間の行を削除すると言えます。
マルチマッチングのためにsedを試しましたが、希望のo / pを取得できませんでした。
sed '/-------/{$!N;/\n.*Hostname/d;}' Input.txt
ベストアンサー1
牛に似た一種の栄養awk
方法:
awk 'BEGIN{
RS = ORS = "-------\n";
pat = "^Hostname += ([^ ]+)\nService name += ([^ ]+)\n$";
}
NR == FNR{
if (match($0, pat, a)) { items[a[1], a[2]]++ }
next
}
match($0, pat, a) && (a[1], a[2]) in items \
&& items[a[1], a[2]] > 1{ next }1' inout.txt input.txt
出力:
-------
Database alias = ABC
Node name = node01
Hostname = hostnode01
Service name = 12345
-------
Database alias = PQR
Node name = node01
Hostname = hostnode01
Service name = 12345
-------
Database alias = XYZ ......
-------