В тексте разобрать бардак кто поможет? Только Awk!
Ни одна из серьезных новостных лент, связанных с IT, не прошла мимо того факта, что свет увидела очередная версия языка Awk. С 1977 года, когда он появился на свет, без awk-вставок не обходится сколь-нибудь серьезный bash-скрипт.
Самоучителей по Awk в Инете много (рекомендую вот этот, где довольно сжато, но весьма толково изложено процентов, наверно, 90 возможностей языка). Но, все-таки, давайте вкратце попробуем понять как это работает.
Назначение Awk — преобразовывать один текстовой поток в другой, более подходящий. Представим, например, что есть ведомость на выдачу зарплаты в таком текстовом файле:
Нам нужно ее красиво оформить, с шапкой и подписью руководителя. Программа на Awk выглядит так:
Как видим, в коде присутствуют три блока. Первый (начинается словом BEGIN) обрабатывается один раз в начале программы. Последний (END) — в конце. А тот, что в середине обрабатывает каждую строку входящего потока. Причем строка расщепляется по пробелу или, в нашем случае, по точке с запятой, и к каждому ее элементу можно обратиться как к переменной $1, $2, $3 и т.д. Вся строка целиком содержится в переменной $0.
Если сохранить этот код в исполняемый файл test.awk, то можно запустить скрипт
и получить требуемый аутпут:
Тот, кто знаком с основами любого C-подобного языка программирования, без труда разберется в нехитром наборе функций и синтаксисе языка. Так что на сим закончу. Sapienti sat
Самоучителей по Awk в Инете много (рекомендую вот этот, где довольно сжато, но весьма толково изложено процентов, наверно, 90 возможностей языка). Но, все-таки, давайте вкратце попробуем понять как это работает.
Назначение Awk — преобразовывать один текстовой поток в другой, более подходящий. Представим, например, что есть ведомость на выдачу зарплаты в таком текстовом файле:
Абрамович Р.А ; Бригадир ; 30,000
Джамшутов Д.Р. ; Штюкатур ; 15,000
Равшанов Р.Д. ; Каменшык ; 16,500
Нам нужно ее красиво оформить, с шапкой и подписью руководителя. Программа на Awk выглядит так:
#!/usr/bin/awk -f
BEGIN {
print "Ведомость на выдачу зарплаты"
print "------------------------------------------"
}
{
printf ("%s\t%s\t%s\t\n", $1, $2, $3)
}
END {
print "------------------------------------------"
print "Директор ООО \"Рога и копыта\" Бендер О.И."
}
Как видим, в коде присутствуют три блока. Первый (начинается словом BEGIN) обрабатывается один раз в начале программы. Последний (END) — в конце. А тот, что в середине обрабатывает каждую строку входящего потока. Причем строка расщепляется по пробелу или, в нашем случае, по точке с запятой, и к каждому ее элементу можно обратиться как к переменной $1, $2, $3 и т.д. Вся строка целиком содержится в переменной $0.
Если сохранить этот код в исполняемый файл test.awk, то можно запустить скрипт
test.awk -F';' zarplata.dat
и получить требуемый аутпут:
Ведомость на выдачу зарплаты
------------------------------------------
Абрамович Р.А Бригадир 30,000
Джамшутов Д.Р. Штюкатур 15,000
Равшанов Р.Д. Каменшик 16,500
------------------------------------------
Директор ООО "Рога и копыта" Бендер О.И.
Тот, кто знаком с основами любого C-подобного языка программирования, без труда разберется в нехитром наборе функций и синтаксисе языка. Так что на сим закончу. Sapienti sat
Комментарии (5)
RSS свернуть / развернутьSergei_T
Забыл сказать: есть очень качественная реализация Awk для Java.
yababay
Каким образом можно преобразовать таблицы *.exl в *.xml
ahmetzyanov_d
durman
yababay
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.