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 ~的主要内容,如果未能解决你的问题,请参考以下文章

awk输出指定列

LINUX awk 语句 awk ' SUM += $1 END print SUM '请问这个要怎么理解,需详细

awk命令范例

利用awk赋值

awk常用命令

Microsoft SQL Server 代码片段收集