шаблон awk соответствует неправильным номерам - PullRequest
0 голосов
/ 04 апреля 2011

Мой скрипт делает это

ls -1A | awk '/model[1-9]+.dat/' | while read FN

но когда я увеличиваю модель [1-9] до модели [1-1000], она не соответствует ожидаемым файлам.

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Вам вообще не нужен awk, расширения bash должно быть достаточно.

for filename in model{1..1000}.dat; do ...; done
2 голосов
/ 04 апреля 2011

при увеличении модели [1-9] до модели [1-1000] она принимает случайное число

нравится model100.dat, model105.dat. модель11.дат ... и т. д.

Нет, это не случайно.

[1-1000] не означает «любое число от 1 до 1000». Это означает число от 1 до 1, или 0, или 0, или 0. Это просто 0 или 1. Что явно не то, что вы имели в виду.

Если вы хотите просмотреть только первые 1000 файлов, вы можете создать шаблон, который говорит, что имя файла должно состоять из одной цифры [0-9], двух цифр [0-9][0-9] или трех цифр [0-9][0-9][0-9]. Поместите | между каждым, чтобы обозначить «или». Так написано ([0-9]|[0-9][0-9]|[0-9][0-9][0-9]). Это означает 0-999.

Тогда вы можете изменить свою часть awk на

awk '/^model([0-9]|[0-9][0-9]|[0-9][0-9][0-9])\.dat$/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...