Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex AWK中的正则表达式_Regex_Bash_Awk - Fatal编程技术网

Regex AWK中的正则表达式

Regex AWK中的正则表达式,regex,bash,awk,Regex,Bash,Awk,我正在尝试使用awk模式解析以下输入: 史密斯,吉姆12.34 12.34吉姆·史密斯 我有一个模式检查,看看第一个字段是否包含字母字符第二个字段包含字母字符第三个字段包含数字第二个模式检查第二个案例如下: $1 ~ /[A-Za-z]/ && $2 ~ /[A-Za-z]/ && $3 ~ /[0-9]/{ do fun things with record } $3 ~ /[A-Za-z]/ && $2 ~ /[A-Za-z]/ &&a

我正在尝试使用awk模式解析以下输入:

史密斯,吉姆12.34

12.34吉姆·史密斯

我有一个模式检查,看看第一个字段是否包含字母字符第二个字段包含字母字符第三个字段包含数字第二个模式检查第二个案例如下:

$1 ~ /[A-Za-z]/ && $2 ~ /[A-Za-z]/ && $3 ~ /[0-9]/{
do fun things with record
}
$3 ~ /[A-Za-z]/ && $2 ~ /[A-Za-z]/ && $1 ~ /[0-9]/
{
this is the second form of the record
}
但是,我的程序似乎同时通过了检查并执行了这两个操作。我一直想弄清楚我把事情搞砸了,但同样的事情一直在发生。任何指向正确方向的点都是值得赞赏的。我知道有很多方法可以做到这一点。我发现了一些,但我想知道我在这里做错了什么

我正在用awk运行CentOS 7:

gawk --version
GNU Awk 4.0.2

如果您的字段同时包含alpha值和数值,那么它将通过这两个测试。比如说

$ echo "James007" | awk '/[a-zA-Z]/{print "alpha"} /[0-9]/{print "number"}'
将同时打印这两个。如果只想限制alpha和number,可以这样做

$ echo "James 007" | awk '$1~/^[a-zA-Z]+$/{print "alpha"} $2~/^[0-9]+$/{print "number"}'

问题是第二个模式后的大括号前的换行符。这将按预期工作:

$1 ~ /[A-Za-z]/ && $2 ~ /[A-Za-z]/ && $3 ~ /[0-9]/{
 print "do fun things with record"
}
$3 ~ /[A-Za-z]/ && $2 ~ /[A-Za-z]/ && $1 ~ /[0-9]/{ # NO newline here
 print "this is the second form of the record"
}
解释:AWK程序由成对的
模式{action}
组成,其中模式或操作可以省略。在模式和动作之间添加换行符将使awk将其解析为一个没有动作的模式,然后是一个没有模式的动作(即,一个无条件执行的动作)


底线:坚持使用AWK。

你是对的,但是示例输入中的字段不包含字母和数字值。感谢埃及方括号链接。你抓了我半个小时。