函数中的Python子进程awk命令,将list中的元素作为参数

时间:2018-03-25 16:12:41

标签: python awk subprocess

我想使用list元素作为参数对awk命令进行子处理。

使用单个参数,并且从shell提示符开始,它很简单:

$ awk -F "," '/US/ && /00001/ {print $1","$3}' stock_inventory.csv  > pretest_00001.csv

因此,使用列表,我把它全部放在Python脚本中,如:

import subprocess

mylist = [00001, 00002, 00003]

def myawk(item_code):
    subprocess.call("awk -F "," '/US/ && /%d/ {print $1","$3}' stock_inventory.csv  > pretest_%d.csv") % item_code

for i in mylist:
    myawk(i)

我在某处做错了。 Popen可以提供任何帮助吗? 在这种情况下,lambda怎么样?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

也许是ditch python并在awk中完成所有工作?

$ awk 'BEGIN{FS=OFS=",";
             n=split("00001,00002,00003",item)}
       /US/ {for(i=1;i<=n;i++) 
               if($0~item[i]) 
                 print $1,$3 > "pretest_"item[i]".csv"}' stock_inventory.csv  

答案 1 :(得分:0)

感谢大家的帮助。

我找到了一种更优雅的方法来解决它,虽然它不是通过Python脚本而是通过Bash而是。

#!/bin/bash

declare -a arr=("00001" "00002" "00003")

for i in "${arr[@]}"

do

    cat stock_inventory.csv | grep $i | grep US | awk -F "," '{print $1","$3}' > pretest_$i.csv

done