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

有什么帮助吗?

谢谢!

这不是由脚本中引起的(正如最初的问题标题所断言的那样(:如果您运行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

相关内容

  • 没有找到相关文章

最新更新