sed:最初に出ていない行と前の行を削除します。

sed:最初に出ていない行と前の行を削除します。

たとえば、次のようになります(例:.srtファイルから)。

231
00:13:35,230 --> 00:13:37,120
- Oh, my sister got me into it.

232
00:13:37,129 --> 00:13:38,269
- Yeah?

233
00:13:37,129 --> 00:13:38,269
Is that her?

234
00:13:40,049 --> 00:13:41,090
- Yeah.

線が00:13:37,129 --> 00:13:38,2692回現れて2つの部分をつなげたいです。したがって、次のように動作する必要があります。

  • " --> "を含むすべての行を確認してください。
  • 前の結果と一致する場合は、この行と上記の2行を削除してください。

結果は次のとおりです。

231
00:13:35,230 --> 00:13:37,120
- Oh, my sister got me into it.

232
00:13:37,129 --> 00:13:38,269
- Yeah?
Is that her?

234
00:13:40,049 --> 00:13:41,090
- Yeah.

これは私のsed能力をはるかに超えたことです。内部バッファとパターン空間で動作できますか?まあ、私もこの問題をどのように解決するのかわかりません...

ベストアンサー1

これを行うには、awkを使用します。

$ cat tst.awk
(!NF) {                # blank line
    b = ""; f = 1      # empty buffer, start buffering
}
/-->/ {                # timestamp
    f = 0              # stop buffering
    if (p == $0) {     # same timestamp
        next           # discard buffer, start over
    }
    p = $0             # save timestamp
    printf "%s", b     # print buffer
}
f {                    # buffering enabled
    b = (b $0 ORS)     # buffer line
    next               # start over
}
1                      # print line

出力:

$ awk -f tst.awk file
231
00:13:35,230 --> 00:13:37,120
- Oh, my sister got me into it.

232
00:13:37,129 --> 00:13:38,269
- Yeah?
Is that her?

234
00:13:40,049 --> 00:13:41,090
- Yeah.

おすすめ記事