Shell script in python with variables
我仍然是python的新手。
我有一个带有数字列表的文本文件,每个数字都有两个"属性":
1 2 3 | 250 121 6000.654 251 8472 650.15614 252 581 84.2 |
我想搜索第1列并将第2和第3列作为单独的变量返回,以便稍后使用它们。
1 2 | cmd =""" cat new.txt | nawk '/'251'/{print $2}'""" os.system(cmd) |
这是因为它打印$ 2列,但我想将此输出分配给变量,类似于此(但这会返回错误数AFAIK):
1 | cmdOutput = os.system(cmd) |
我还想根据变量更改nawk'd值,如下所示:
1 | cmd =""" cat new.txt | nawk '/'$input'/{print $2}'""" |
如果有人可以提供帮助,谢谢。
不要使用
只需使用Python
1 2 3 4 5 | 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] |
没有
首先,要格式化cmd字符串,请使用
1 2 | input = '251' cmd =""" cat new.txt | nawk '/'{input}'/{{print $2}}'""".format(input=input) |
但实际上,您根本不需要外部命令。
1 2 3 4 5 6 7 8 9 10 | 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) |
我想你要找的是:
1 | subprocess.Popen(["cat","new.txt","|","nawk","'/'$input/{print $2}'"], stdout=subprocess.PIPE).stdout |