Вызов скрипта python из awk - PullRequest
3 голосов
/ 03 мая 2011

большинство решений там вызвано awk от python. Но я хочу сделать это наоборот. У меня есть скрипт Python, который извлекает информацию из файла. Однако упомянутое имя файла указано в столбце скрипта awk.

Как передать python аргумент "% s20s", имя файла и получить данные из стандартного вывода? Я хочу добавить вывод, как несколько столбцов больше.

спасибо за ваши примеры

Приветствия

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

Переменная awk FILENAME дает имя текущего обрабатываемого файла (или '-', если stdin).Однако это не доступно в блоке BEGIN, но вы можете использовать ARGV [1] вместо этого (при условии, что вы передаете только одно имя файла):

#!/bin/awk -f

BEGIN {
    cmd = "./myscript.py '\"%s20s\"' " ARGV[1]
    print cmd
    cmd  | getline var       
    print var
}

Сценарий python (py3), который я использовал для тестирования,:

#!/usr/bin/python

import sys
print(sys.argv)

Итак, я получаю следующий вывод:

/home/user1> runit.awk afile
./myscript.py "%s20s" afile
['./myscript.py', '"%s20s"', 'afile']
3 голосов
/ 03 мая 2011

Вы можете вызывать внешние команды, используя функцию system.Решает ли это вашу проблему?

$ awk 'BEGIN { system("echo something") }'
something

Но это только обеспечивает код возврата.Если вам нужно захватить стандартный ввод, вы можете сделать это:

$ awk 'BEGIN { "echo something" | getline; print "output: "$0 }'
output: something

Getline работает построчно, поэтому, если вам нужно несколько строк:

$ awk 'BEGIN { while ("cat multi_line_file" | getline) { print "output: "$0 } }'
output: line 1
output: line 2
output: line 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...