linux - 在 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的在线解释器中的演示
推荐阅读
- c++ - 使用没有动态分配的指针c++的矩阵
- python-2.7 - Python2.7中无法导入socketio(python-socketio)
- python - 如何在数据透视表中多次使用 df 列
- javascript - 如何将 jquery 转换为 reactjs 组件?
- python - 我的内核卡在处理简单代码(网络抓取)
- rxjs - 如果满足某个条件,有什么方法可以重置间隔值?
- c# - 依靠 Groupby 并更新列值 C# DataTable
- linux - 如何找出分配给我的设备的 ioport
- reactjs - 如何在 React 中动态渲染有状态组件
- bluetooth - 如何绕过 chrome web 蓝牙选择设备提示