передача именованной переменной в качестве аргумента командной строки в сценарий perl

Если я правильно понимаю вопрос, вы в основном делаете

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
2
08.11.2017, 20:41
1 ответ

Ниже показано чтение 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код, не прибегая к использованию код в отдельном файле.

0
24.06.2020, 19:00

Теги

Похожие вопросы