Просто:
awk '$1=NR "."'
Это заменит первое поле (первый текст перед пробелом )на строку (запись )номер и точку. Поскольку номер записи всегда положительный и больше 0, результат присваивания всегда будет истинным, что приведет к печати строки (записи )с измененным первым полем.
При изменении первого поля NF (количество полей )и нулевое поле ($0 )получают повторно -вычисляемое преобразование всех повторяющихся белых -пробелов в один пробел.
То есть :строки, имеющие несколько смежных пробелов (и табуляции ), объединяются в один пробел.
Если из обработки awk необходимо спасти несколько пробелов, это становится довольно запутанным (только GNU awk имеет patsplit):
awk '{
n=patsplit($0,f,/[^ \t\n]+/,s); # split the line storing whitespace.
f[1] = NR "." # only change actually needed.
for(i=0;i<=n;i++) # for all fields (and separators)
{
printf("%s%s",f[i],s[i]) # print each field and separator.
}
print("") # cause the printing of an OFS
}
' patsplitfile
С GNU awk для мульти -char RS:
$ echo '(TJ)-8.5(o12)-3.2(p1)-15.3(ik)-1.2(1)' |
awk -v RS='[(][^)]+)' '{gsub(/[0-9]/,""); printf "%s%s", $0, RT}'
(TJ)-.(o12)-.(p1)-.(ik)-.(1)
С GNUawk
:
gawk '{print gensub(/(\([^)]*\))|[0123456789]+/, "\\1", "g")}'
В основном перевод sed
's:
sed -E 's/(\([^)]*\))|[0123456789]+/\1/g'