Если я правильно понимаю вопрос, вы в основном делаете
svr_vars 1995051200_72259.txt
, и программа генерирует вывод называется svr_vars.txt
, и вы хотите его переименовать в svr.1995051200_72259.txt
Предполагая, что все 300 файлов начинаются с номера и заканчиваются на .txt
, тогда вы можете выполнить цикл, аналогичный
#!/bin/bash
for file in [1-9]*.txt
do
svr_vars "$file"
mv svr_vars.txt "svr.$file"
done
. Мы можем добавить к этому циклу некоторые проверки работоспособности, чтобы он прервался, если что-то не работает должным образом. например
#!/bin/bash
for file in [1-9]*.txt
do
if [ -e "svr.$file" ]
then
echo "$file already processed. skipping"
else
svr_vars "$file"
if [ ! -e svr_vars.txt ]
then
echo "Failed to create results for $file"
else
mv svr_vars.txt "svr.$file"
fi
fi
done
Ниже показано чтение awk -как назначение переменных из строки команды -, а также принятие в строке -perl-кода в сценарии оболочки:
# cat test.sh
perl - FS=':' GRP='50' <<'EOF'
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
print "$FS\n";
print "$GRP\n";
EOF
Это доказательство:
# sh test.sh
:
50
А вот альтернативная форма ответа OP, которая принимает встроенный, многострочный -код Perl:
# cat test.sh
perl -s -- - -xyz="abc" <<'EOF'
print "xyz=$xyz\n";
EOF
И доказательство:
# sh xyz.sh
xyz=abc
Этот формат очень похож на awk
, написанный в сценарии оболочки, и позволяет легко заменить переведенный не -тривиальный awk
код на a2p
сгенерированный perl
код, не прибегая к использованию код в отдельном файле.