首页 > 解决方案 > 将 2 个文件的内容通过管道传输到 bash 中的 2 个不同参数

问题描述

我有一个文件pattern.txt

pattern1
pattern2
pattern3
pattern4
...

我有另一个名为的文件text.txt,它包含一个带有空格、换行符等的巨大随机字符串。

我想处理这两个文件的内容以便能够进行这些调用(顺序-p无关紧要-t):

python3 main.py -p pattern1 -t 'text.text content'
python3 main.py -p pattern2 -t 'text.text content'
python3 main.py -p pattern3 -t 'text.text content'
... etc

这是我到目前为止所做的:

cat patterns.txt | xargs -i -n1 python main.py -p {} -t "how are you doing"

标签: linuxbashshellpipe

解决方案


用于对 中的每一行xargs -a执行main.py一次pattern.txt

xargs -a pattern.txt -I {} python3 main.py -p {} -t "$(< text.txt)"

您还可以使用-P并行运行脚本的多个副本。

如果main.py是可执行的并且有一个 shebang 行,#!/usr/bin/env python3那么最好省略显式python3调用。让脚本控制自己的解释器:

xargs -a pattern.txt -I {} ./main.py -p {} -t "$(< text.txt)"

如果您愿意,也可以使用手动循环来执行此操作。

text=$(< text.txt)
while IFS= read -r pattern; do
    ./main.py -p "$pattern" -t "$text"
done < pattern.txt

推荐阅读