Unix awk 命令正则表达式问题
我有这样的数据:
# data_display
ab as we hj kl
12 34 45 83 21
45 56 98 45 09
我只需要第一列,并且只需要以数字开头的行。
我现在使用:
# data_display | awk '{ print $1 }' | grep "^[0-9]"
有没有什么方法可以进一步优化它,比如在 awk 本身中使用正则表达式?
我对 awk 很陌生。
谢谢。
KK
I have data like this:
# data_display
ab as we hj kl
12 34 45 83 21
45 56 98 45 09
I need just the first column alone, and only the rows starting with numbers.
I now use:
# data_display | awk '{ print $1 }' | grep "^[0-9]"
Is there any way to optimise it more, like using the regex in awk itself?
I am very new to awk.
Thanks.
KK
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以直接将 grep regexp 放在 awk 命令中:
You can place the grep regexp in the awk command directly:
您可以使用
cut
代替awk
:You could use
cut
instead ofawk
:为了获得更高的准确性,请检查实际数字(如果您有像 1a 这样的数据,它不是数字,但会使用目前给出的解决方案进行匹配。
或者
for more accuracy, check for actual numbers (in case you have data like 1a, which is not a number but will match using the solution given so far.
or
cut -d' ' -f1 文件名 | grep '^[0-9]'
这应该是最快的。因为 awk 会查找文件并将其分类为记录和字段。
在这里,我们通过剪切第一个字段来最大限度地减少 grep 需要处理的数据量。
cut -d' ' -f1 filename | grep '^[0-9]'
this should be the fastest. since awk looks and classifies the file as records and fields.
here we are minimizing the amount of data that grep needs to process by cutting the first field.
当然可以:
为您提供:
Awk
命令由要匹配的实际模式和要运行的命令组成。如果没有模式,该命令将对所有行运行。Sure you can:
gives you:
Awk
commands consist of an actual pattern to match and a command to run. If there's no pattern, the command runs for all lines.在 awk 中,正则表达式位于包含花括号的 print 语句之前。所以在你的情况下, awk 调用将是:
In awk, regular expressions come before the print statement including the curly braces. So in your case, the awk call would be: