如何在awk中调用python脚本,为15万行双列文件新增第三列
实现方案
方案1:修正awk调用逻辑
你之前的命令执行失败是因为awk并不支持反引号直接调用外部命令获取输出的语法,需要通过getline函数完成外部命令输出的捕获,修正后的写法如下:
awk ' NR==1 { print $0, "Col3" next } { cmd = "/homes/script.py " $1 if ((cmd | getline col3) > 0) { sub(/\n$/, "", col3) print $0, col3 } close(cmd) }' original.list > new.list
注意:该方案每行都会启动一个独立的Python进程,15万行规模下进程调度开销很高,运行速度较慢,更适合小文件场景。
方案2:纯Python实现(更适合15万行大文件)
仅启动一次Python进程即可完成全量处理,性能远高于逐行启动进程的方案,推荐使用。
你只需要把原有script.py的核心处理逻辑抽为可导入的函数,示例调整如下:
# /homes/script.py 调整示例,保留原有命令行调用能力不影响旧用法 import sys def calc_result(col1): # 此处替换为你原来的处理逻辑 return "your_output" if __name__ == "__main__": if len(sys.argv) > 1: print(calc_result(sys.argv[1]))
之后编写批量处理脚本即可生成目标文件:
import sys sys.path.append("/homes") from script import calc_result with open("original.list", "r", encoding="utf-8") as infile, open("new.list", "w", encoding="utf-8") as outfile: # 处理表头 header = next(infile).strip() outfile.write(f"{header}\tCol3\n") # 逐行处理数据 for line in infile: line = line.strip() if not line: continue col1, col2 = line.split() col3 = calc_result(col1) outfile.write(f"{col1}\t{col2}\t{col3}\n")
内容的提问来源于stack exchange,提问作者ZakS
相关产品推荐
相关产品推荐

