2014-01-24 2 views
2

У меня есть файл:AWK объяснение пример

AWK question about the example 

Эта команда, которая работает хорошо:

awk '{ gsub(/...../, "&\n") ; print}' file 
AWK q 
uesti 
on ab 
out t 
he ex 
ample 

Почему эта команда не печатает тот же результат?

awk '{ gsub(/.{5}/, "&\n") ; print}' file 
AWK question about the example 

Почему эта команда не печатает тот же результат?

awk -v WIDTH=5 '{ gsub(".{"WIDTH"}", "&\n"); print }' file 
AWK question about the example 

ответ

7

Для использования {5} Вам необходимо включить re-interval так:

awk --re-interval '{ gsub(/.{5}/, "&\n") ; print}' file 
awk -v WIDTH=5 --re-interval '{ gsub(".{"WIDTH"}", "&\n"); print }' file 

Вы также можете использовать --posix тоже, но это приведет к отключению других функций в awk

awk -v WIDTH=5 --posix '{ gsub(".{"WIDTH"}", "&\n"); print }' file 
+0

Спасибо за разъяснение. – Tedee12345

+0

+1 Кроме того, если вы обновляетесь до версии Gnu Awk версии 4, вам больше не нужно указывать '-re-interval'. –

+0

Хорошая точка, но тогда она будет менее портативной, так как большинство дистрибутивов linux все еще включено gawk 3.xx. Не спрашивайте меня, почему с 4.x существует какое-то время. – Jotne

5

Вы можете используйте команду fold вместо awk:

fold -w 5 input 

или если вы не имеете вход в файле:

echo 'AWK question about the example' | fold -w 5 

И Give:

AWK q 
uesti 
on ab 
out t 
he ex 
ample 
+3

Вы можете, но не дать ответа на вопрос OPs, почему он не работает. – Jotne

+1

Правильно, но есть правильный инструмент для каждой проблемы, и вы уже ясно объяснили проблему. – perreal

Смежные вопросы