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