Alex_Piggy
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код: #File: test.awk #Usage: awk -f test.awk input.dsl >output.dsl #Инициализация переменных. word - текущее слово, data - его описание. BEGIN {FS="";word="";data="";} #Если строка пустая или начинается с "#" - печатает то, что было раньше и ее. (next - перейти к следующей строке в файле) $0 ~ /^#|^$/ {checkworddata();print $0;next;} #Если строка начинается с пробела или табуляции - сохраняет ее в переменную data. $0 ~ /^[ \t]/{data = ((data=="")?"":data RS) $0;next;} #Если строка начинается не с пробела или табуляции - проверяет прошлое слово и начинает работу с этим словом. $0 ~ /^[^ \t]/{checkworddata();word=$0;data="";next;} #В конце файла - проверить последнее слово. END {checkworddata();} #Проверка слова function checkworddata() { #Если слова нет - ничего не делать if (word == "") return; #Если слово начинается с заглавной латиницы - ничего не делать if (word ~ /^[A-Z]/) return; #Если в опиcании встречается "]abbr" - ничего не делать (возможно, аббривеатура?) if (data ~ /\]abbr/) return; #Ничего из вышеперечисленного - печатать и слово и описание. print word;print data; } |
|