Я хочу использовать имя моего входного файла (baseline.YYYYMM.tar) в моем выходном имени файла (baseline.YYYYMM.var1.tar). Я могу обрабатывать входные файлы, но не знаю, как передать нужное мне выходное имя файла в мое приложение cdo:
#!/bin/bash
prefix="basename"
fndate=$(ls | grep tar|cut -c 10-15)
var="var1"
extension=".tar"
outputfile=$prefix $fndate $var $extension
for f in $(find . -name "*.tar" -print) ; do
cdo selname,var1 $f $outputfile
done
Благодарность
2 ответа
Я не на 100% уверен, что понимаю то, что вы пытаетесь сделать, но если я прав, вы должны иметь возможность использовать что-то вроде этого, чтобы получить имя выходного файла из ввода:
var=var1
for f in *.tar; do
output=$(awk -v s="$var" 'BEGIN{FS=OFS="."}{print $1, $2, s, $3}' <<<"$f")
# use "$output" however you want, e.g.
echo "$output"
done
Здесь используется awk для разделения имени входного файла $f
и вставки переменной оболочки $var
в середину. <<<"$f"
- это синтаксис bash, эквивалентный echo "$f" |
в начале команды.
(Согласен с замечаниями о разборе ls.) Точки забыли?
outputfile=$prefix $fndate $var $extension
Должно быть
outputfile=${prefix}.${fndate}.${var}${extension}
Похожие вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.