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

bash for loop, use input filename in the output filename

我想在我的输出文件名 (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

谢谢

我不是 100% 确定我明白你想要做什么,但如果我是对的,你应该能够使用类似这样的东西从输入中获取输出文件名:

var=var1
for f in *.tar; do
    output=$(awk -v s="$var" 'BEGIN{FS=OFS="."}{print , , s, }' <<<"$f")
    # use "$output" however you want, e.g.
    echo "$output"
done

这使用 awk 拆分输入文件名 $f 并在中间插入 shell 变量 $var<<<"$f" 是 bash 语法,等同于命令开头的 echo "$f" |

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

 outputfile=$prefix $fndate $var $extension

应该是

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