【问题标题】:Passing variable values to awk command in python scripting在python脚本中将变量值传递给awk命令
【发布时间】:2020-05-04 23:30:47
【问题描述】:

我有以下 awk 命令

awk -F "|" '{ if($132==0 && $123==1) print $145}' abc.dat

我想通过从下面的变量 a、b、c 传递值而不是数值来生成 awk 命令并执行它,但它没有发生。它给了我语法错误。有人可以帮助我使用 python 脚本运行这个 awk 命令吗?

a = 132,

b = 123,

c = 145

我正在使用 python 3.4.4

【问题讨论】:

  • 您使用的是 awk 还是 Python?你是在 shell 中从 Python 调用 awk 吗?为什么不直接在 Python 中处理文件?你的问题很混乱。
  • 此要求需要 awk 命令才能使用 python 脚本 3.4.4 运行。是的,我必须使用 python 调用 awk 推荐。我这样做是为了自动化
  • 不太清楚你想做什么......我猜它是在 python 中调用 shell 脚本? import subprocess ; subprocess.run([awk command, some variable...])

标签: python python-3.x command-line-arguments


【解决方案1】:

您希望通过某些 Python 代码将您测试和打印的列号传递给 awk。你需要做这样的事情:

import subprocess

def awk_by_cols(a, b, c):
    program = "{ if($%d==0 && $%d==1) print $%d}" % (a, b, c)
    return subprocess.check_output(["awk", "-F|", program, "abc.dat"])

if __name__ == "__main__":
    print(awk_by_cols(1, 2, 4).decode())

# Sample data file abc.dat holds:
"""\
0|0|0|0
0|0|1|1
0|1|0|2
0|1|1|3
1|0|0|4
1|0|1|5
1|1|0|6
1|1|1|7
"""

program 字符串中嵌入列号可以使用许多其他方法来完成。我选择了最传统的方法——printf-style。

【讨论】:

    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多