gpt4 book ai didi

regex - gawk 匹配函数参数作为正则表达式

转载 作者:行者123 更新时间:2023-12-03 23:26:17 24 4
gpt4 key购买 nike

我在使用 gawk 时遇到错误。下面是我的脚本和示例文件
你们能帮帮我吗?我认为正则表达式是对的,但是当它传递给匹配函数时出现错误。我尝试了各种方法,例如将\赋予正则表达式或 double 的特殊字符。
$猫脚本.sh

#!/bin/bash
gawk '
BEGINFILE{
while( getline < FILENAME > 0 ){
print match($0, /[0-9]+\.[0-9]+(?= ops/s)/)
print $0
}
}
' ./file
$猫文件
123.456: IO Summary: 123456 ops 1234.567 ops/s 100/100 rd/wr   1.0mb/s 1.111ms/op
$ sh 脚本.sh
gawk: cmd. line:4: error: Unmatched ( or \(: /[0-9]+\.[0-9]+(?= ops/

最佳答案

正则表达式在 awkgnu-awk不支持前瞻。您可以使用此替代方法 gnu-awk命令:

awk 'match($0, /([0-9]+\.[0-9]+) ops\/s/, m) {print m[1]}' file

1234.567
这是符合 POSIX 标准的 awk 命令来执行相同的操作:
awk 'match($0, /[0-9]+\.[0-9]+ ops\/s/) {
print substr($0, RSTART, RLENGTH-6)}' file

1234.567
但是,如果每行可以有多个匹配项,则使用:
awk '{
s = $0
while (match(s, /([0-9]+\.[0-9]+) ops\/s/, m)) {
print m[1]
s = substr(s, RSTART + RLENGTH)
}
}' file

关于regex - gawk 匹配函数参数作为正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65574161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com