Использование awk для поиска строк с несколькими цифрами

вот file1

200
201
202
203
204
205
2001
2002
2003
2004
2005

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

7 ответов


если предположить, что первое поле содержит только числа:

awk 'length() == 3' file1

если нет, перейдите к одному из решений regex.


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

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

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

  1. 100aap преобразуется к виду 100, и печатается.
  2. 005 преобразуется к виду 5, и не получает напечатанный.

awk ' ~ /^[0-9][0-9][0-9]$/' file1

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

если вы хотите использовать интервал выражение оператор {} в вашем регулярном выражении вам нужно будет использовать gawk и --posix переключатель:

gawk --posix ' ~ /^[0-9]{3}$/' file1

вот:

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

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

awk ' ~ /^[0-9]{3}$/' file1

awk '/^[0-9][0-9][0-9]([^0-9]|$)/ {print }' file

видеть

чтобы найти строки, которые имеют только 3 цифры и ничего больше:

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

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

[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

awk '{ if ( ~ /^[0-9][0-9][0-9]$/) print }' file

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

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


awk '{num=/1; if (num == ) if (length() == 3) print }' file

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