Использование awk для поиска строк, состоящих из нескольких цифр - PullRequest
7 голосов
/ 21 ноября 2011

Вот файл1

200
201
202
203
204
205
2001
2002
2003
2004
2005

Существует ли awel oneliner, который находит только строки с тремя цифрами в первом поле?

Ответы [ 7 ]

14 голосов
/ 21 ноября 2011
awk '$1 ~ /^[0-9][0-9][0-9]$/' file1

Это будет соответствовать первому полю ($1) только с тремя цифрами (обратите внимание на диапазон принудительного старта и останова, обозначенный ^ и $).Затем он печатает всю строку ($0).Вам не нужно {print $0} после совпадения с регулярным выражением, потому что действие по умолчанию - это печать строки.Затем вы должны использовать gawk и переключатель --posix:

gawk --posix '$1 ~ /^[0-9]{3}$/' file1
10 голосов
/ 21 ноября 2011

Если мы можем предположить, что первое поле содержит только цифры:

awk 'length($1) == 3' file1

Если нет, воспользуйтесь одним из решений регулярных выражений.


Альтернативное решение:

awk '$1 >= 100 && $1 <= 999' file1

печать всей строки, где числовое значение первого поля находится в диапазоне (100 999). Это решение имеет две оговорки:

  1. 100aap преобразуется в 100 и печатается.
  2. 005 преобразуется в 5 и не печатается.
5 голосов
/ 21 ноября 2011

Вот один из них:

awk '$1 ~ /^[[:digit:]]{3}$/' file1

Или, если вы предпочитаете диапазон вместо класса символов POSIX:

awk '$1 ~ /^[0-9]{3}$/' file1
3 голосов
/ 21 ноября 2011
awk '/^[0-9][0-9][0-9]([^0-9]|$)/ {print $0}' file

См.

Чтобы найти строки, содержащие только 3 цифры и ничего больше:

awk '/^[0-9][0-9][0-9]$/ {print $0}' file
1 голос
/ 21 ноября 2011

Немного неортодоксально, но вы тоже можете это сделать -

[jaypal~/Temp]$ cat text7
200
201
202
203
204
205
2001
2002
2003
2004
2005
[jaypal~/Temp]$ awk 'BEGIN{FS="";} NF<4{print}' text7
200
201
202
203
204
205
0 голосов
/ 23 ноября 2011
awk '{num=$1/1; if (num == $1) if (length($1) == 3) print $0}' file

Должен работать с ведущими нулями (ями)

0 голосов
/ 21 ноября 2011
awk '{ if ($1 ~ /^[0-9][0-9][0-9]$/) print $0}' file

Обратите внимание, что мы используем reg-ex, который задает 3 char-класса (что угодно внутри [..]), из просто 0-9. Первое поле файла обозначено как $ 1. '^' И '$' указывают начало и конец поля. Если их там нет, поля с 4 или более цифрами также будут совпадать.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...