Как загрузить файлы и все результаты положить в отдельные файлы в Bash? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть несколько файлов формата * .afa.Мне нужно удалить пробелы из них, и у меня есть инструмент для этого.Это лицо.Команда в fac:

fac -g inputFile.afa outputFile.afa

И работает отлично.Но теперь мне нужно автоматически обработать файлы 100хх, и я хочу написать это.Но в результате мне нужно иметь неизменный входной файл и в результате файл с именем R на первом месте в имени файла.Например:

Before:
1.afa 30kb
2.afa 30kb
3.afa 40kb

After:
1.afa 30kb
R1.afa 15kb
2.afa 30kb
R2.afa 15kb
3.afa 40kb
R3.afa 20kb

Bash мне незнаком.Я знаю, что должен изучить это, и я буду, но мне нужен результат быстро.Теперь я просто пишу это:

#!/bin/bash
ls *.afa | parallel "fac -g {} >{R.}.afa"

Но: 1. Я не могу написать правильное регулярное выражение для печати результата в новом файле в R в первой букве 2. Только последний результат сохраняется в одномфайл.Это не генерирует результат для каждого файла.

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Причина, по которой вы не можете написать правильное регулярное выражение для parallel, заключается в том, что здесь нет никакого регулярного выражения.{} просто заменяется указанным именем.Если вы хотите добавить R, это просто R{}:

#!/bin/bash
parallel "fac -g {} R{}" ::: *.afa

Поскольку использование труб из ls не считается хорошей практикой, в этом примере вместо этого используется расширение glob.

0 голосов
/ 15 февраля 2019

Вы должны быть в состоянии сделать это в одной строке в оболочке bash, при условии, что вы находитесь в папке, где находятся все файлы .afa:

l=($(ls *.afa)); for f in ${l[@]}; do fac -g $f "R$f"; done
# Should also work without "" around R$f.

Как указывалось @codeforester, этолучше (безопаснее):

for f in *.afa; do fac -g $f "R$f"; done

Это можно расширить как:

l=(*.afa) # bash array for all .afa files.
for f in ${l[@]}; do # loop over array
    fac -g $f R$f; # Run original command for each $f
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...