1

我有一个结构为记录列表的文件,其中字段分隔符是 \t。我只想提取第二个字段是从 1 到 9 的数字的记录,但我的 awk 脚本不起作用。awk 脚本是

cat file |awk -v FS="\t" '$2 ~ /[0-9]{1}/ {print $0;}'

或这个

cat file |awk -v FS="\t" '$2 ~ /.{1}/ {print $0;}'  #because the second fields of my file have  all second fields as number

为什么这些脚本不起作用?正则表达式不是一个好的正则表达式吗?

4

2 回答 2

1

更新

即使有区间{1},你仍然会匹配一个字段,23因为它2匹配一个数字。您真正想要使用的是锚点,而忘记了间隔:

awk '$2 ~ /^[0-9]$/{print}' FS="\t" file

问题是间隔的使用{1}awk低于版本 4 不支持间隔。 gawk另一方面,如果您添加以下标志:--re-interval

试试这个:

awk --re-interval '$2 ~ /[0-9]{1}/{print}' FS="\t" file

其他一些需要注意的事项:

  1. 内置变量,例如FS可以在最后分配而无需-v
  2. 您可以使用 justprint而不是print $0它的默认行为
  3. 无用的使用catawk可以将文件作为参数,而是使用它
于 2012-01-22T23:47:56.530 回答
1

如果要确保第二个字段是个位数,则不需要正则表达式:

awk '1 <= $2 && $2 <= 9 {print}'
于 2012-01-23T03:02:13.220 回答