首页 > 解决方案 > 在 awk 中使用变量中的正则表达式

问题描述

我有一个文件,其中的记录由空行分隔,如下所示:

ID0
field1
field2
field3

ID1
field1
field2
field3

ID2
field1
field2
field3

...

因此,要根据我使用的 ID 获取记录的所有内容awk 'BEGIN {RS=""} /ID1/' file

但是,问题是我想用一个脚本来制作它,并将 id 作为变量传递。

我已经写了这样的脚本(但它不起作用):

#! /usr/bin/awk -f

# Set Record Separator
BEGIN {RS=""}

# Search that record that contains the id
/id/

我称之为./script.awk -v id=ID1 file

有什么帮助吗?

谢谢!

标签: linuxbashshellawk

解决方案


这不是由在脚本中引起的(正如原始问题标题所断言的那样):如果您正在运行awk -v id=ID1 'BEGIN {RS=""} /id/' file. 您使用的方式/id/不是查看名为id;的变量。相反,它期望id是匹配的确切正则表达式。

而不是使用/varname/(将其varname视为正则表达式本身,而不是包含正则表达式的变量的名称),请使用$0 ~ varname

#! /usr/bin/awk -f

# Set Record Separator
BEGIN {RS=""}

# Search that record that contains the id
$0 ~ id

请参阅https://ideone.com/amz1u1的在线解释器中的演示


推荐阅读