Как мне превратить мою команду awk в команду python - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть команда awk, которая работает в bash, но сейчас я пытаюсь поместить ее в скрипт на python

Я пробовал и os.system, и subprocess.call, оба возвращают одну и ту же ошибку.sh: 1: Синтаксическая ошибка: "(" неожиданно

os.system('awk \'FNR<=27{print;next} ++count%10==0{print;count}\' \'{0} > {1}\'.format(inputfile, outpufile)')

Так что эта команда awk возьмет большой входной файл и создаст выходной файл, который оставляет первые 27 строк заголовка, но затем начинается со строки 28только берет каждую 10-ю строку и помещает ее в выходной файл

Я использую .format (), потому что он находится внутри скрипта Python, где входной файл будет отличаться при каждом запуске.

Ive также пытался

subprocess.call('awk \'FNR<=27{print;next} ++count%10==0{print;count}\' \'{0} > {1}\'.format(inputfile, outpufile)')

, оба с той же ошибкой, что и выше. Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Существуют две основные проблемы с вашим кодом Python:

  1. format() - это вызов метода python, его не следует помещать в строку awk_cmd для выполнения под оболочкой
  2. при вызове метода format () фигурные скобки {} используются для определения цели замещения в строковых объектах формата, их необходимо экранировать с помощью {{ ... }}

См. Ниже измененную версию вашегокод:

awk_cmd = "awk 'FNR<=7{{print;next}} ++count%10==0{{print;count}}' {0} > {1}".format(inputfile, outpufile)
os.system(awk_cmd)
0 голосов
/ 12 апреля 2019

Согласно приведенному выше комментарию, возможно, более pythonic (и более управляемый) для непосредственного использования python.

Но, если вы хотите использовать awk, тогда один из способов - отформатировать вашу команду с вашими переменными именами файловотдельно.

Работает с использованием основного тестового текстового файла:

import os


def awk_runner(inputfile, outputfile):
    cmd = "awk 'FNR<=27{print;next} ++count%10==0{print;count}' " + inputfile + " > " + outputfile
    os.system(cmd)


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