同じID文字列を持つ行を削除する方法

同じID文字列を持つ行を削除する方法

次のファイルがあります(========実際にはファイルに存在します)。

start ======== id: 5713
start ======== id: 5911
start ======== id: 5911
end ========= id: 5911
start ======== id: 6111
end ========= id: 5713
start ======== id: 31117

start同じIDを持つそれぞれend

上記の例に基づいて、出力は次のようになります。

start ======== id: 5911
start ======== id: 6111
start ======== id: 31117

bash、、awk...でsedこれを行う方法は?

ベストアンサー1

すべてのUnixシステム上のすべてのシェルでawkを使用すると、入力にある数のペアのない開始および/または終了ステートメントが印刷されます。

$ cat tst.awk
$1 == "start" { beg[$NF] = $0; delta =  1 }
$1 == "end"   { end[$NF] = $0; delta = -1 }
{ cnt[$NF] += delta }
END {
    for ( key in cnt ) {
        for (i=1; i<=cnt[key]; i++) {
            print beg[key]
        }
        for (i=-1; i>=cnt[key]; i--) {
            print end[key]
        }
    }
}

$ awk -f tst.awk file
start ======== id: 5911
start ======== id: 6111
start ======== id: 31117

より良いデモンストレーションのために、より包括的な入力例を使用してください。

$ cat file
start ======== id: 5713
start ======== id: 5911
start ======== id: 5911
start ======== id: 5911
end ========= id: 5911
start ======== id: 6111
end ========= id: 5713
end ========= id: 5713
start ======== id: 31117

$ awk -f tst.awk file
end ========= id: 5713
start ======== id: 5911
start ======== id: 5911
start ======== id: 6111
start ======== id: 31117

おすすめ記事