python中的Shell脚本与变量

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}'"""

如果有人可以提供帮助,谢谢。


不要使用catnawk。 请。

只需使用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]

没有cat。 没有nawk


首先,要格式化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