Unix awk 命令正则表达式问题

发布于 2024-08-13 16:03:04 字数 321 浏览 2 评论 0原文

我有这样的数据:

# 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

旧梦荧光笔 2024-08-20 16:03:05

您可以直接将 grep regexp 放在 awk 命令中:

data_display | awk '/^[0-9]/{ print $1 }'

You can place the grep regexp in the awk command directly:

data_display | awk '/^[0-9]/{ print $1 }'
我也只是我 2024-08-20 16:03:05

您可以使用 cut 代替 awk

$ data_display | grep '^[0-9]' | cut -f 1 -d ' '

You could use cut instead of awk:

$ data_display | grep '^[0-9]' | cut -f 1 -d ' '
谈下烟灰 2024-08-20 16:03:05

为了获得更高的准确性,请检查实际数字(如果您有像 1a 这样的数据,它不是数字,但会使用目前给出的解决方案进行匹配。

$ awk '$1+0==$1' file

或者

awk '$1 ~/^[0-9]+$/' file

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.

$ awk '$1+0==$1' file

or

awk '$1 ~/^[0-9]+$/' file
夜还是长夜 2024-08-20 16:03:05

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.

北恋 2024-08-20 16:03:05

当然可以:

pax> echo 'ab as we hj kl  
12 34 45 83 21  
45 56 98 45 09' | awk '/^[0-9]/ {print $1}'

为您提供:

12
45

Awk 命令由要匹配的实际模式和要运行的命令组成。如果没有模式,该命令将对所有行运行。

Sure you can:

pax> echo 'ab as we hj kl  
12 34 45 83 21  
45 56 98 45 09' | awk '/^[0-9]/ {print $1}'

gives you:

12
45

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.

倒数 2024-08-20 16:03:04

在 awk 中,正则表达式位于包含花括号的 print 语句之前。所以在你的情况下, awk 调用将是:

awk '/^[0-9]/ {print $1}'

In awk, regular expressions come before the print statement including the curly braces. So in your case, the awk call would be:

awk '/^[0-9]/ {print $1}'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文