GNU Parallel:如何依据输入参数命名文件捕获输出
解决GNU Parallel生成自定义输出文件名的问题
我来帮你搞定这个需求!你当前的命令问题在于重定向操作>是在Parallel进程之外,shell会先解析$1和$2(这两个是shell的位置参数,不是Parallel拆分后的字段),所以没法得到你想要的文件名。
正确的命令写法
# 先确保输出目录存在,避免报错 mkdir -p /var/output # 执行Parallel命令 parallel -j2 --colsep ' ' -a "/tmp/input" 'python script.py > /var/output/log_{1}_{2}.txt'
关键细节解释
- 用Parallel的占位符代替shell变量:Parallel会把每行拆分后的字段用
{1}、{2}来引用(对应第一、第二个字段),而不是$1、$2——因为$1是shell的位置参数,在Parallel启动前就会被shell解析,根本轮不到Parallel来替换。 - 把整个命令用单引号包裹:这样shell不会提前解析
{1}和{2},确保这些占位符能被Parallel正确识别和替换。 --colsep ' ':明确指定分隔符是制表符(注意这里是真实的制表符,不是空格),保证每行的两个字段被正确拆分。
测试示例
假设你的/tmp/input内容是:
user1 tag1 user2 tag2 user3 tag3
执行上面的命令后,/var/output目录下会生成三个文件:
log_user1_tag1.txtlog_user2_tag2.txtlog_user3_tag3.txt
每个文件对应python script.py处理该行字段后的输出。
内容的提问来源于stack exchange,提问作者RJ.
相关产品推荐
相关产品推荐

