Вопрос по awk/gawk

Все о программировании под *nix
Аватара пользователя
Captain Flint
Увлекающийся
Сообщения: 82
Зарегистрирован: 02 дек 2002, 18:54

Вопрос по awk/gawk

Сообщение Captain Flint »

Может кто из уважаемых господ знает, как средствами awk/gawk решить такую задачу:

В скрипте zzz.awk нужно задать проверку на наличие строки из файла A в файле B.

Т.е. надо что-то вроде
grep -f string.list in_file.name
на на awk

Anonymous

Сообщение Anonymous »

The function system(expr) uses /bin/sh to execute expr and
returns the exit status of the command expr. Changes made
to the ENVIRON array are not passed to commands executed
with system or pipes.

Аватара пользователя
Captain Flint
Увлекающийся
Сообщения: 82
Зарегистрирован: 02 дек 2002, 18:54

Сообщение Captain Flint »

В том и дело, что не хотел бы вызывать system(), т.к. цель в том, чтобы сделать более-менее универсальный скрипт, для разных платформ.
Но проблему практически решил, спасибо за ответ.

Гость

Сообщение Гость »

Можно с помощью getline файлы читать. Но это не awk style.

Аватара пользователя
Captain Flint
Увлекающийся
Сообщения: 82
Зарегистрирован: 02 дек 2002, 18:54

Сообщение Captain Flint »

А какой awk стиль? И где об этом можно почитать/узнать?

Аватара пользователя
leikind
Неотъемлемая часть форума
Сообщения: 811
Зарегистрирован: 20 июн 2002, 03:02
Откуда: Брюссель
Контактная информация:

Сообщение leikind »

Captain Flint писал(а):А какой awk стиль? И где об этом можно почитать/узнать?
http://www.gnu.org/manual/gawk-3.1.1/ht ... /gawk.html


awk почти такой же древний, как C, и почти теми же людьми создан. В некотором смысле это предок Perl.
Изображение

Аватара пользователя
Captain Flint
Увлекающийся
Сообщения: 82
Зарегистрирован: 02 дек 2002, 18:54

Сообщение Captain Flint »

[quote="Anonymous"]Можно с помощью getline файлы читать. Но это не awk style.[/quote]
Ладно, со стилем спорить не буду, хоть и в вышепредложенном документе не нашел упоминания о том, что getline -- плохой стиль. Попозже внимательнее пересмотрю.
Но, допустим, мне нужно каждую строку одного файла считать в массив до того, как начну обрабатывать второй файл. Я это делаю так:

BEGIN {
for (i = 1; i < 5; i++) getline ar_lst[i] < "wusrls.txt"
}
#other
...

_Не_ используя getline как мне это сделать? Я только начал разбираться с awk, поэтому рад любому конструктивному замечанию.

Гость

Сообщение Гость »

С awk принятно работать как с фильтром. То есть пропускать файлы через скрипт. И словарь (1-й файл) тоже можно пропустить через скрипт, только зачитав все строки. Но в твоем случае getline может быть даже уместнее. Я, пожалуй, погорячился насчет стиля. Если захочешь сделать в виде фильтра - hint: в переменной FILENAME хранится имя текущего обрабатываемого файла или "-" для stdin.

Аватара пользователя
Captain Flint
Увлекающийся
Сообщения: 82
Зарегистрирован: 02 дек 2002, 18:54

Сообщение Captain Flint »

Задачу решил, всем спасибо за ответы.

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

Вопрос по awk.

А как пройтись по ассоциативному массиву, если я не знаю всех его ключей?

Функции, похожей на foreach не нашёл :(. Да и вообще, об Arrays в man awk - кот наплакал.

Буду рад подсказке.

Ответить