В тексте разобрать бардак кто поможет? Только Awk!

Ни одна из серьезных новостных лент, связанных с IT, не прошла мимо того факта, что свет увидела очередная версия языка Awk. С 1977 года, когда он появился на свет, без awk-вставок не обходится сколь-нибудь серьезный bash-скрипт.

Самоучителей по 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
  • +4
  • 03 июля 2011, 22:18
  • yababay

Комментарии (5)

RSS свернуть / развернуть
+
0
Awk — академичная вещь. Мода приходит и уходит, консольные утилиты остаются.
avatar

Sergei_T

  • 04 июля 2011, 09:02
+
0
Для меня вообще оказался спасением. Как раз нужно было сложный текст разрулить. Совсем запутался, а тут новость про Awk. Дай, думаю, попробую. А оно как выстрелит Класс!

Забыл сказать: есть очень качественная реализация Awk для Java.
avatar

yababay

  • 04 июля 2011, 11:56
+
0
Вопрос немного не по теме :
Каким образом можно преобразовать таблицы *.exl в *.xml
avatar

ahmetzyanov_d

  • 04 июля 2011, 18:45
+
0
Пардоньте, а можно пр *.exl поподробнее? =)
avatar

durman

  • 04 июля 2011, 19:52
+
0
Excel имеешь в виду? Посмотри «Сохранить как...», там много вариантов. Последний формат офисных документов от Microsoft — не что иное, как зазипованный xml. Так же как и в OpenOffice.
avatar

yababay

  • 04 июля 2011, 19:59

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.