понимание SUB, используемого в команде AWK
Мне нужно понять, как работает эта команда:
awk 'BEGIN{while(a++<30)s=s " "};{sub(/^.{6}/,"&" s)};l' myfile
Я понимаю, как первая часть (выражение В разделе BEGIN {}) создает строку пробелов длиной 30 символов. Но не понимаю вторую часть (sub).
sub
добавляет недавно сгенерированную строку "s" в 6-й столбец "myfile". Но, как я вижу команду, шаблон поиска /^.{6}/
должен искать все строки, которые начинаются с одного символа (.) а затем {6} и заменить их пробелом-добавлено струна!
2 ответа:
Это не имеет никакого отношения к 6-му столбцу, и он не ищет литерал {6}.
Фигурные скобки означают "это много из предыдущего шаблона" (если вы вызываете GNU awk с --posix или --re-interval).Итак, этот паттерн:
/^.{6}/
Эквивалентно этому:
/^....../
Он добавляет строку
s
после первых 6 символов, которые могут быть любыми символами.Следующая команда awk сделает нечто подобное:
awk 'BEGIN{while(a++<30)s=s " "} {print substr($0, 1, 6) s substr($0, 7)}' myfile