awk中的多行编辑

时间:2015-01-09 12:30:11

标签: awk multiline

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

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

的行

我想删除所有单行记录,因此第一条记录应该下降,第二条记录应该保留。

很简单所以我想。

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

我还尝试检查包含2行结束字符的记录

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

两者都没有。

1 个答案:

答案 0 :(得分:3)

您无法在记录分隔符中使用^$,因为它们是基于记录分隔符的记录的开头和结尾。

试试这个

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",$0,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
-------------------------------------------------------------------------------