【问题标题】:pipe content of 2 files to 2 different parameters in bash将 2 个文件的内容通过管道传输到 bash 中的 2 个不同参数
【发布时间】:2019-01-04 21:42:40
【问题描述】:

我有一个文件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"

【问题讨论】:

    标签: linux bash shell pipe


    【解决方案1】:

    使用xargs -apattern.txt 中的每一行执行一次main.py

    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
    

    【讨论】:

      【解决方案2】:

      你可以在 pattern.txt 中循环每一行:

      while read line; do python3 main.py -p "$line" -t 'text.text content'; done < pattern.txt
      

      【讨论】:

      • 这不起作用它只对第一行执行
      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 2018-06-04
      • 2023-03-19
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多