awk '$1 ~
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk '$1 ~相关的知识,希望对你有一定的参考价值。
我试图选择一个有一定数量逗号的字段。例如,我可以在一个字段中选择1个逗号,如下所示。
$ echo jkl,abc | awk '$1 ~ /[a-z],[a-z]/{print $0}'
jkl,abc
预期的输出是 "jkl,abc", 可以看到.
然而,当我尝试选择2个逗号时,却没有成功。
$ echo jkl,abc,xyz | awk '$1 ~ /[a-z],[a-z],[a-z]/{print $0}'
(no output)
有什么想法吗?
谢谢!我想在字段中选择一个逗号。
答案
应该是这样的。
echo jkl,abc,xyz | awk '/[a-z]+,[a-z]+,[a-z]+/{print $0}'
或者...
echo jkl,abc,xyz | awk '/[a-z]+,[a-z]+,[a-z]+/'
OP的代码为什么不能用。
因为上位机只提到了一个出现的 [a-z]
和 ,
但不是这样的,在逗号前有超过1个字符,因此它不匹配。用你给的代码 $1
不需要,因为你是整行匹配,所以我去掉了 $1
部分的解决方案。
如果你有多个字段(用空格隔开),并且你想检查第一部分的条件,那么你可以使用:
echo "jkl,abc,xyz blabla" | awk '$1 ~ /[a-z]+,[a-z]+,[a-z]+/'
另一答案
/[a-z],[a-z],[a-z]/
doesn't match jkl,abc,xyz
因为你没有使用量化符。正确的regex应该是。/^[a-z]+,[a-z]+,[a-z]+$/
例如:
awk '/^[a-z]+,[a-z]+,[a-z]+$/' <<< 'jkl,abc,xyz'
然而,为了验证逗号的数量,最好是在比较字段数量的同时使用 FS = ","
像这样。
awk -F, 'NF == 2' <<< 'jkl,abc'
awk -F, 'NF == 3' <<< 'jkl,abc,xyz'
jkl,abc
jkl,abc,xyz
另一答案
你的regexp的中间部分并不包含逗号之间的一个以上的字母 所以你应该只包含这一部分 [a-z]*
或 [a-z]+
取决于你对处理零字母情况的要求。
在一个字段中找到2个或更多逗号的一些方法可以考虑。
$ echo jkl,abc,xyz | awk '$1 ~ /[a-z],[a-z]*,[a-z]/'
jkl,abc,xyz
$ echo jkl,abc,xyz | awk '$1 ~ /([a-z]*,){2,}/'
jkl,abc,xyz
$ echo jkl,abc,xyz | awk '$1 ~ /[^,],[^,]*,[^,]/'
jkl,abc,xyz
$ echo jkl,abc,xyz | awk '$1 ~ /([^,]*,){2,}/'
jkl,abc,xyz
$ echo jkl,abc,xyz | awk 'gsub(/,/,"&",$1) > 1'
jkl,abc,xyz
以上是关于awk '$1 ~的主要内容,如果未能解决你的问题,请参考以下文章