繁体   English   中英

awk匹配模式没有空格

[英]awk matching pattern without spaces

我需要匹配文档第一行中的模式。 字段分隔符是“:”,并且我希望在未遵循模式时收到错误消息。 我需要区分有和没有空格的字段。 我使用这样的东西:

awk -F ":" '{if (($1 ~/^@[A-Za-z0-9]*/) && ($2 ~/[0-9]*/) && ($3 ~/[0-9]*/) && ($4 ~/[0-9]*/) && ($5 ~/[0-9]+/)){print "ok"} else { print "no"}}'  

如果是,我会“好”

$1 

"AAABBBF43T5Y" 

即使是

"AABBBF 43T5Y"

当$ 1或其他字段中有空格时,我需要得到“否”。

有什么建议么?

好吧,这有点令人困惑。

我有这样的事情:

@HWUSI-EAS100R:6:73:941:1973#0/1

我想检查每个领域。 第一个可以包含任何字符,第二个只包含数字等。 但是不允许使用空格,因此它不正确:

@HWUSI-E AS100R:6:73:9 41:1973#0/1

感谢您的反馈,抱歉让您感到困惑。

您的示例和措辞非常混乱,但似乎您要检查第一个字段是否包含空格。 你可以这样做:

$ cat file
AABBBF43T5Y:f2:f3
AABBBF 43T5Y:f2:f3

$ awk -F: '$1~/ /{print "FAIL LINE: ",NR;next}{print "PASS LINE:",NR}' file
PASS LINE: 1
FAIL LINE: 2

如果您只想检查打印输出的条件,那么这可以更简单地编写,如果您想要以前的任何其他块结构允许更容易修改:

$ awk -F: '{print $1~/ /?"FAIL":"PASS","LINE:",NR}' file
PASS LINE: 1
FAIL LINE: 2

如果您清楚地描述问题,发布代表性输入文件和预期输出,您将获得更好的答案。

编辑:

只要正则表达式匹配用^$锚定并且只包含允许的字符,那么就不会有空格:

$ cat file
@HWUSI-EAS100R:6:73:941:1973#0/1
@HWUSI-E AS100R:6:73:9 41:1973#0/1

$ awk -F: '$1~/^@[a-zA-Z0-9-]*$/&&$2~/^[0-9]*$/{print "PASS",NR;next}{print "FAIL",NR}' file
PASS 1
FAIL 2

所以只有正则表达式匹配且正则表达式为: $2~/^[0-9]*$/才被评估为真:

^      # Match start of field
[0-9]* # Zero or more digits
$      # The end of the field

这将允许空白字段或仅数字字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM