【发布时间】:2021-04-06 09:52:39
【问题描述】:
我正在尝试执行 awk 命令来处理 python 脚本中的一些文本文件。以下行将打印输入文件的最后 2 列并按第二列排序。此命令有效:
subprocess.call(["awk",'{print $NF,$(NF-1) | "sort -k 2 -n" }', file2],stdout=f3).
现在我想从已排序的文件中删除 NF col。我添加了以下行,它在“管道”上给出了语法错误
subprocess.call(["awk",'{print $NF,$(NF-1) | "sort -k 2 -n" | '$NF="";print'}', file2],stdout=f3)
我的语法中缺少什么?
【问题讨论】:
-
您是否真的愿意让
awk负责启动sort? (如果是这样,您是否有一个常规的 shell 命令以您想要的方式运行,所以我们可以将问题的 Python 特定部分与一般 shell+awk 的问题区分开来?) -
...请注意,也可以很容易地让 awk 在内部进行排序,而不是让它启动单独的
sort可执行文件。 -
但是,一个人也可以很容易地在 Python 中完成整个过程,而根本不需要
awk或sort。 -
@tripleee,我不确定这是不是特定链接原件的副本。修改前的工作代码示例在上下文中使用管道,它是一个 awk 构造(尽管是一个启动 shell 的 awk 构造,而且使用它通常是一个非常糟糕的主意)而不是 shell 构造。
-
@CharlesDuffy Ack,很抱歉没有正确阅读。无论如何,我选择的欺骗可能是模糊相关的,尽管这个问题对于规范来说并不是特别好; stackoverflow.com/questions/24306205/…
标签: python awk subprocess