LINUX.ORG.RU

awk чтение файла в переменную


0

2

Как в awk-программе записать в переменную содержимое внешнего файла. Т.е. не того который я построчто считываю и обрабатываю, а еще одного. Задача такова, что результат работы awk-программы пишется в файл, но нужно еще в начало этого файла записать содержимое другого файла (ну типа как шапка/заголовок), чтобы посторчно не делать print в awk-программе.

>Задача такова, что результат работы awk-программы пишется в файл, но нужно еще в начало этого файла записать содержимое другого файла

Может быть, в этом случае проще будет вызвать из awk cat?

proud_anon ★★★★★
()
Ответ на: комментарий от php-coder

Сделал так:

getline header < "ct.sql"
print header > "out.sql"
В out.sql только первая строка из ct.sql А как можно сделать чтобы все содержимое файла сохранялся в переменную?

kernel32ddl
() автор топика

Вот так получилось:

while ((getline line < "in.tpl") > 0)
	print line > "out.sql";
close("eric_axe_devices_ct.tpl")

kernel32ddl
() автор топика
Ответ на: комментарий от kernel32ddl

А как так делать, не поделитесь примером?

Например, так:

awk 'BEGIN { system("cat /etc/passwd"); }'

По-хорошему, следует, наверное, закрыть поток:

awk 'BEGIN { cmd = "cat /etc/passwd"; system(cmd); close(cmd); }'

...но он и так вроде бы должен закрыться при выходе из awk.

Хотя решение на getline является более переносимым.

proud_anon ★★★★★
()

А вам и не нужно делать в AWKе. Сделайте это в объемлющем скрипте. Например так

( cat FILE ; script.awk < IN ) >OUT

Это попросту не UNIX way - делать такую конкатенацию в awk программе. Не усложняйте жизнь ни себе, ни тем, кто будет потом сопровождать ваше творчество.

anonymous
()
Ответ на: комментарий от anonymous

Вообще, нужно активнее комбинировать средства, предоставляемые UNIX. Сложный фильтр старайтесь представить в виде комбинации на скриптовом языке более простых фильтров.

anonymous
()

Всем большое спасибо за советы, остановился на варианте с getline.

while ((getline line < "in.tpl") > 0)
   print line > "out.sql";
close("in.tpl")
kernel32ddl
() автор топика
Ответ на: комментарий от kernel32ddl

анонимус дело написал про комбинацию { cat FILE; awk script < IN; } > OUT

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.