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
-------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------