Сценарий оболочки в python с переменными - PullRequest
0 голосов
/ 18 июля 2011

Я все еще новичок в питоне.У меня есть текстовый файл со списком чисел, и у каждого номера есть два «атрибута» вместе с ним:

250 121 6000.654
251 8472 650.15614
252 581  84.2

Я хочу найти 1-й столбец и вернуть 2-й и 3-й столбцы как отдельные переменныетак что я могу использовать их позже.

cmd = """ cat new.txt | nawk '/'251'/{print $2}' """
os.system(cmd)

Это работает в том, что печатает столбец $ 2, но я хочу присвоить этот вывод переменной, что-то вроде этого (однако это возвращает количество ошибок AFAIK):

cmdOutput =  os.system(cmd)

также я хотел бы изменить значение nawk'd на основе переменной, примерно так:

cmd = """ cat new.txt | nawk '/'$input'/{print $2}' """

Если кто-то может помочь, спасибо.

Ответы [ 3 ]

5 голосов
/ 18 июля 2011

Не используйте cat и nawk. Пожалуйста.

Просто используйте Python

import sys
target= raw_input( 'target: ' ) # or target= sys.argv[1]
with open('new.txt','r') as source:
    for columns in ( raw.strip().split() for raw in source ):
        if column[0] == target: print column[1]

Нет cat. № nawk.

2 голосов
/ 18 июля 2011

Прежде всего, чтобы отформатировать строку cmd, используйте

input = '251'
cmd = """ cat new.txt | nawk '/'{input}'/{{print $2}}' """.format(input=input)

Но на самом деле вам вообще не нужна внешняя команда.

input = '251'
with open('new.txt', 'r') as f:
    for line in file:
        lst = line.split()
        if lst[0] == input:
            column2, column3 = int(lst[1]), float(lst[2])
            break
    else: # the input wasn't found
        column2, column3 = None, None
print(column2, column3)
0 голосов
/ 18 июля 2011

Я думаю, что вы ищете:

subprocess.Popen(["cat", "new.txt","|","nawk","'/'$input/{print $2}'"], stdout=subprocess.PIPE).stdout
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...