arrays - awk 模式搜索数组中的所有项目
问题描述
工作awk代码:
BEGIN {bla}
/patern1/ {userFunction(input1)}
...
/paternN/ {userFunction(inputN)}
END {bla}
现在我尝试存储paternX
和inputX
使用数组并使用 for 循环
实际试过:
for (i in patern)
$0 ~ /patern[i]/ {userFunction(input[i])}
$ ... awk:38: for (i in patern)
$ ... awk:38: ^ syntax error
或者
$0 ~ /for (i in patern)/ {userFunction(input[i])}
$ ... awk:40: $0 ~ /patern[i]/ {userFunction(input[s])}
$ ... awk:40: ^ syntax error
简化示例
cat >> inputs << EOF
1
2
3
1
1
EOF
在职的
awk '
/1/{print "one"}
/2/{print "two"}' inputs
解决方案
for
-- 并且if
-- 是一个只能进入 awk 规则的“动作”部分而不是“条件”部分的语句;并且//
仅适用于文字模式(正则表达式)而不是变量:
{ for( i in patterns ) if( $0 ~ patterns[i] ) userFunction( inputs[i] ) }
但是,由于 awk 数组下标可以是任何字符串,也称为“关联”,而不是让两个数组保持同步,您可以使用一个:
BEGIN{ pat_inp["pattern1"]="input1"; pat_inp["pattern2"]="input2"; ... }
{ for( i in pat_inp ) if( $0 ~ i ) userFunction( pat_inp[i] ) }
推荐阅读
- ruby-on-rails - 旧版 Rails 应用程序尝试在 docker 容器中预编译资产时失败
- python - 如何切换 Flask-SQLAlchemy 的 SQLALCHEMY_DATABASE_URI b/w 两个数据库?
- python-3.x - 如何使用熊猫数据框中的纬度和经度计算距离?
- php - 编译错误:无法声明类,因为该名称已在使用中
- javascript - 将数组转换为字符串,用分隔符分隔字符串 - JavaScript
- python - 计算草中多边形特征的函数?
- javascript - 一次打开一个标题
- c - 图解说明
- r - 从历史中获取最后一个命令作为R中的文本字符串
- python - 自定义 url 模式之前的 Django 第三方库 url 模式?(网址模式顺序)