【发布时间】:2020-04-21 09:33:10
【问题描述】:
我在 R 中有这个函数,我用它来生成日期列表:
#! usr/bin/env Rscript
date_seq = function(){
args = commandArgs(trailingOnly = TRUE)
library(lubridate)
days = seq(ymd(args[1]),ymd(args[2]),1)
days =format(days, "%Y%m%d")
return(days)
}
date_seq()
我在 bash 脚本中调用此函数来创建日期向量:
Rscript date_seq.R 20160730 20160801 > dates
我在 bash 脚本中定义了其他几个字符串变量:
home_url="https://pando-rgw01.chpc.utah.edu/hrrr/sfc/"
file_name="/hrrr.t{00-23}z.wrfsfcf00.grib2"
最终目标是创建一个下载链接向量,其中包含三个变量home_url、date 和file_name,如下所示:
"https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20160730/hrrr.t{00-23}z.wrfsfcf00.grib2"
"https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20160731/hrrr.t{00-23}z.wrfsfcf00.grib2"
"https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20160801/hrrr.t{00-23}z.wrfsfcf00.grib2"
我在 bash 脚本中尝试了几行:
-
for date in $dates; do download_url=$home_url$date$hrrr_file; cat $download_url; done -
for date in $dates; do download_url="${home_url}${date}${hrrr_file}"; cat $download_url; done for date in $dates; do download_url="$home_url"; download_url+="$date"; download_url+="$hrrr_file"; cat $download_url; done
这些都不会产生我期望的输出。我不确定download_url 变量是否没有被生成,或者正在生成并存储在某个地方,我无法重现它。谁能帮我理解一下?
编辑
尝试以下建议的结果:
- @triplee 建议使用
和sed "s#.*#$home_url&$hrrr_file#" "dates"
这两个都会产生这个输出:while read -r date; do; printf '%s%s%s\n' "$home_url" "$date" "$hrrr_file"; done <dateshttps://pando-rgw01.chpc.utah.edu/hrrr/sfc/[1] "20160730" "20160731" "20160801"/hrrr.t{00-23}z.wrfsfcf00.grib2 - @xdhmoore 建议使用
产生这个输出:for date in $(cat dates); do; echo ${home_url}${date}${hrrr_file}"; donehttps://pando-rgw01.chpc.utah.edu/hrrr/sfc/[1]/hrrr.t{00-23}z.wrfsfcf00.grib2 https://pando-rgw01.chpc.utah.edu/hrrr/sfc/"20160730"/hrrr.t{00-23}z.wrfsfcf00.grib2 https://pando-rgw01.chpc.utah.edu/hrrr/sfc/"20160731"/hrrr.t{00-23}z.wrfsfcf00.grib2 https://pando-rgw01.chpc.utah.edu/hrrr/sfc/"20160801"/hrrr.t{00-23}z.wrfsfcf00.grib2`
虽然@xdhmoore 的解决方案更接近,但两者都不是我期望的输出。但是我在@xdhmoore 的解决方案中看到了另一个问题:输出中日期周围的引号。 cat dates 的输出看起来像这样:"20160730" "20160731" "20160801",所以我认为我必须重新编写函数或在 bash 脚本中调用它的方式。
我会不断更新问题以反映所有建议的输出,因为这样做比尝试回答每条评论更简单。一如既往,非常感谢!
【问题讨论】:
-
我想你想
echo $download_url而不是cat它。或者可能是curl它。 -
@xdhmoore 最终,是的,我们的想法是使用
curl下载这些链接所代表的文件,但在我到达那里之前,我想确保脚本正在生成正确的下载链接,这就是我想查看链接的原因。此外,echo $download_url和echo "$download_url"在屏幕上显示download_url变量方面没有任何作用。 -
我认为您还需要 cat 日期文件:
for date in $(cat dates) -
我对 Rscript 一无所知,但看起来日期文件包含您的
date_seq()返回对象的默认序列化版本。与其返回并将其序列化并打印出来,也许有一种方法可以在date_seq()中显式打印出这些值?这应该摆脱引号和[1]希望。 -
实际上,我认为
[1]可能来自date_seq()中的一个错误,但就像我说的,我不知道任何Rscript,所以我不确定。
标签: bash concatenation rscript