передать содержимое двух файлов в 2 разных параметра в bash - PullRequest
0 голосов
/ 05 января 2019

У меня есть файл 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"

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Вы можете перебрать каждую строку через pattern.txt:

while read line; do python3 main.py -p "$line" -t 'text.text content'; done < pattern.txt
0 голосов
/ 05 января 2019

Используйте 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
...