python子进程awk与-F选项和使用变量的输入文件

时间:2016-03-10 17:34:30

标签: python awk subprocess

我有一个文本文件,其数据以“|”

分隔

E.g。

123 | 456 | 789

我只想打印第二列。 我可以在shell中使用awk:awk -F'|' '{print $ 2}'file.txt

但是,我想使用python子进程来执行此操作。输入文件也必须是变量。

现在,这就是我所拥有的。

import subprocess

file = "file-03-10-2016.txt"

with open('another_file.txt', 'wb') as output:
var = subprocess.check_call(['awk', '{print $2}', file])
print var

这将打印第二列,但它使用空格作为分隔符。我想将分隔符更改为“|”使用awk的-F选项。

2 个答案:

答案 0 :(得分:0)

subprocess.check_call获取与空格字符连接并传递给shell的字符串列表。因此,您只需将-F'|'参数添加为列表中的项目即可。唯一的问题是该列表使用单引号。如果你想保持一致,你需要在参数中转义单引号:

var = subprocess.check_call(['awk', '-F\'|\'', '{print $2}', file])

或者,python也接受双引号作为字符串分隔符:

var = subprocess.check_call(['awk', "-F'|'", '{print $2}', file])

希望有所帮助。

答案 1 :(得分:0)

尝试:

var = subprocess.check_call(['awk', '-F|', '{print $2}', file])

但是,我觉得我应该指出这个任务在纯python中很容易做到:

def awk_split(file_name, column, fs=None):
    with open(file_name, 'r') as file_stream:
        for line in file_stream:
            yield line.split(fs)[column]

for val in awk_split(file, 1, fs='|'):
    # do something...