我有这样的数据:
# 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
答案 0 :(得分:6)
在awk中,正则表达式出现在print语句之前,包括花括号。所以在你的情况下,awk调用将是:
awk '/^[0-9]/ {print $1}'
答案 1 :(得分:2)
您可以直接将grep regexp放在awk命令中:
data_display | awk '/^[0-9]/{ print $1 }'
答案 2 :(得分:1)
您可以使用cut
代替awk
:
$ data_display | grep '^[0-9]' | cut -f 1 -d ' '
答案 3 :(得分:1)
为了更准确,检查实际数字(如果您有像1a这样的数据,这不是数字,但会使用到目前为止给出的解决方案匹配。
$ awk '$1+0==$1' file
或
awk '$1 ~/^[0-9]+$/' file
答案 4 :(得分:1)
cut -d'' - f1 filename | grep'^ [0-9]'
这应该是最快的。因为awk看起来并将文件分类为记录和字段。
这里我们通过削减第一个字段来最小化grep需要处理的数据量。
答案 5 :(得分:0)
当然可以:
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
命令由要匹配的实际模式和要运行的命令组成。如果没有模式,则命令将针对所有行运行。