Я хочу использовать имя моего входного файла (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

Благодарность

1
chuckfinley 26 Янв 2015 в 00:14

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" | в начале команды.

0
Tom Fenech 25 Янв 2015 в 21:49

(Согласен с замечаниями о разборе ls.) Точки забыли?

 outputfile=$prefix $fndate $var $extension

Должно быть

outputfile=${prefix}.${fndate}.${var}${extension}
1
Walter A 25 Янв 2015 в 21:54