Передача значений переменных в команду awk в сценарии python - PullRequest
0 голосов
/ 04 мая 2020

У меня ниже команды awk

awk -F "|" '{ if($132==0 && $123==1) print $145}' abc.dat

Я хочу сгенерировать команду awk, передавая значения из переменных ниже a, b, c в качестве замены вместо числовых значений и выполнить это, но это не происходит. Это дает мне синтаксическую ошибку. Может ли кто-нибудь помочь мне в выполнении этой команды awk с использованием сценариев python?

a = 132,

b = 123,

c = 145

Я использую python 3.4.4

1 Ответ

1 голос
/ 04 мая 2020

Вы хотите передать проверенные номера столбцов и напечатать в awk из некоторого кода Python. Вам нужно сделать что-то вроде этого:

import subprocess

def awk_by_cols(a, b, c):
    program = "{ if($%d==0 && $%d==1) print $%d}" % (a, b, c)
    return subprocess.check_output(["awk", "-F|", program, "abc.dat"])

if __name__ == "__main__":
    print(awk_by_cols(1, 2, 4).decode())

# Sample data file abc.dat holds:
"""\
0|0|0|0
0|0|1|1
0|1|0|2
0|1|1|3
1|0|0|4
1|0|1|5
1|1|0|6
1|1|1|7
"""

Встраивание номеров столбцов в строку program может быть выполнено многими другими методами. Я выбрал самый традиционный метод - printf-style.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...