Страница 1 из 1

Вопрос по awk/gawk

Добавлено: 09 мар 2003, 22:01
Captain Flint
Может кто из уважаемых господ знает, как средствами awk/gawk решить такую задачу:

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

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

Добавлено: 12 мар 2003, 07:51
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.

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

Добавлено: 12 мар 2003, 20:15
Гость
Можно с помощью getline файлы читать. Но это не awk style.

Добавлено: 13 мар 2003, 09:00
Captain Flint
А какой awk стиль? И где об этом можно почитать/узнать?

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


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

Добавлено: 13 мар 2003, 15:30
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, поэтому рад любому конструктивному замечанию.

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

Добавлено: 19 мар 2003, 12:12
Captain Flint
Задачу решил, всем спасибо за ответы.

Добавлено: 14 мар 2006, 00:22
Victor Gr.
Вопрос по awk.

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

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

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