awk 中的多行编辑

Multiline edit in awk

MV: The Garden Murder Case (1936)
-------------------------------------------------------------------------------
MV: The Garden of Allah (1936)
BT: USD 2,200,000 
-------------------------------------------------------------------------------

在上面的格式中我的记录分隔符是------

我想删除所有单行记录,所以上面的第一条记录应该删除,第二条应该保留。

我想的很简单。

BEGIN {RS="^[-]+$"}
  [=11=] !~ /^(BT|GR|OW|RT|AD)/ {next}
  1

我还尝试检查包含 2 个行尾字符的记录

BEGIN {RS="^[-]+$"}
  /$.+$/
  1 {next}

都没用。

您不能在记录分隔符中使用 ^$,因为它们是基于记录分隔符的记录的开始和结束。

试试这个

awk -vRS="\n-+\n" -F"\n" 'NF>1' file

输出

MV: The Garden of Allah (1936)
BT: USD 2,200,000 

如果你想保留字段分隔符,那么你可以使用

awk -vRS="\n-+\n" -F"\n" 'NF>1{printf "%s%s",[=12=],RT}' file

输入

MV: The Garden Murder Case (1936)
-------------------------------------------------------------------------------
MV: The Garden of Allah (1936)
BT: USD 2,200,000
-------------------------------------------------------------------------------
MV: The Garden Murder Case (1936)
-------------------------------------------------------------------------------
MV: The Garden of Allah (1936)
BT: USD 2,200,000
-------------------------------------------------------------------------------

输出

MV: The Garden of Allah (1936)
BT: USD 2,200,000
-------------------------------------------------------------------------------
MV: The Garden of Allah (1936)
BT: USD 2,200,000
-------------------------------------------------------------------------------