bash for循环,在输出文件名中使用输入文件名

时间:2015-01-25 21:14:10

标签: bash

我想在输出文件名(baseline.YYYYMM.var1.tar)中使用输入文件名(baseline.YYYYMM.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 个答案:

答案 0 :(得分:1)

(我同意解析ls的评论。) 你忘记了点吗?

 outputfile=$prefix $fndate $var $extension

应该是

outputfile=${prefix}.${fndate}.${var}${extension}

答案 1 :(得分:0)

我不是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并在中间插入shell变量$var<<<"$f"是bash语法,相当于命令开头的echo "$f" |