Это обслуживает переменное количество полей в том же файле и последний сегмент, являющийся только частично заполненным, т.е. меньшего количества полей, чем указанный (на сегмент).
Отметьте, хотя, что, если количество полей в строке приводит к меньшему количеству сегментов, чем указанный, ничто не записано в выходной файл для тех сегментов нехватки.
awk -v 'ncol=5' -v 'pfix=file' '{
fldn = 0
sfix = 1
segs = NF/ncol
# round up if number of field is not evenly divisible by number of columns
segs = (segs == int(segs)) ?segs :int(segs)+1
while (fldn != NF) {
fmod = (++fldn) % ncol
printf "%s%s", dlim, $(fldn) >> pfix sfix
if (fmod == 1 ) { dlim = " " }
if ((fmod==0 ) || (fldn==NF)) {
printf "\n" >> pfix sfix
dlim = ""; sfix++
}
}
}' infile
В vim
, использовать
/\(^\|\s\)-c\($\|\s\)
В less
:
/(^|\s)-c($|\s\)
Вы могли использовать isk
и границы слова в энергии, но это также соответствовало бы другим вещам, которые могли бы быть опциями; более безопасно явно искать пробелы.
Более короткое выражение энергии для обеспечения символов предшествует или следует
/\(^\|\s\)\@<=-c\>
Эквивалентный человек/меньшее количество:
/(^|\s)-c\b
Дополнительное объяснение (Vim):
Вероятно, самая полезная часть регулярного выражения Vim -c\>
который просто говорит, "Ищут '-c', но только если никакие письма не приходят прямо после". Большую часть времени можно, вероятно, сойти с рук просто поиск с /-c\>
, но ради полноты, я включал выражение для проверки то, что прибывает перед '-c'. То выражение \(^\|\s\)\@<=
, который выглядит сложным просто, потому что синтаксис регулярного выражения Vim является более подробным (в котором он требует, чтобы Вы вышли из группирующихся круглых скобок и 'или' канал). Выражение \(^\|\s\)
означает "Начало строки или пробельного символа". Когда Вы помещаете \@<=
после него это означает, "Действительно не соответствуют этому, просто удостоверьтесь, что это прибывает перед следующей частью регулярного выражения" (который только действительно полезен для операций поиска-и-замены). В сущности Вам, вероятно, не нужно \@<=
часть. Вы могли сократить его далее путем исключения этого и добавления \v
, который говорит Vim, что Вы не будете выходить из необычного синтаксиса. Это было бы похоже /\v(^|\s)-c>
.
Объяснение эквивалентного человека/меньшего количества:
Намного более простой. Для синтаксиса регулярного выражения, используемого меньше (который является пейджером человека по умолчанию), \b
совпадает с Vim \>
, и Вы не должны выходить из круглых скобок или символа вертикальной черты. Это просто ищет строку '-c', который происходит в начале строки или сразу после пробельного символа и удостоверяется, что никакие другие письма не приходят после.