Намного лучше потратить одну минуту моей жизни, чем сто двадцать вашей: -)
Вы можете просто использовать разделитель полей, чтобы сделать это:
pax> echo 'word: other words; more words here; last word
word: more words here; last word' | awk 'BEGIN {FS=";"}{print NF"> "$0}'
3> word: other words; more words here; last word
2> word: more words here; last word
В основном, установите разделитель полей FS
на точку с запятой, чтобы количество полей NF
было установлено так, как вам нужно. Затем распечатайте переменную NF
вместе со всей вашей строкой $0
.
И вы можете получить блоки кода, поставив перед каждой строкой четыре пробела. Когда вы задаете вопрос, в правом верхнем углу окна отображается оранжевый знак вопроса - щелкните по нему, и появится некоторая справка по форматированию через меню.
Что касается вашего последнего вопроса, дополненного вашим (перефразированным) комментарием:
У меня также есть один последний вопрос, как мне установить переменную равной регулярному выражению? Я хотел установить переменную, равную всему тексту перед «:» (поэтому регулярное выражение должно было изолировать «слово»).
Для этого вы можете просто взять копию первого поля и выполнить замену. Я выстроил несколько команд awk
, поскольку они становятся все более сложными, и это облегчает их чтение, но вы можете поместить все это в одну строку, если хотите:
pax> echo 'xyzzy: other words; more words here; last word
plugh: more words here; last word' | awk '
BEGIN {FS=";"}
{ xx = $1;
gsub (/:.*/, "", xx);
print NF" ("xx") > "$0
}'
3 (xyzzy) > word1: other words; more words here; last word
2 (plugh) > word2: more words here; last word
gsub (/:.*/, "", xx)
просто заменит регулярное выражение :.*
(двоеточие, за которым следует что-либо) ничем для переменной xx
.