在变量 bash 脚本后使用通配符

在变量 bash 脚本后使用通配符

我一直在尝试让脚本将所有 csv 文件合并到每月文件中。下面的脚本不起作用,它给出以下错误:

awk: fatal: cannot open file `/ibv_ftp/merged/folder/file201910*.csv' for reading (No such file or directory)

这是脚本无法正常工作的示例。它查找文件“file201910*.csv”而不是所有“file20191030.csv”文件。每一天都有自己的档案。

要明确的是。我遇到的问题是星号不能用作通配符。但它被用在文件名中。在变量之后调用时它似乎不起作用。即使以不同方式使用变量,带/不带引号或使用 [01-31] 或问号代替星号。它们都显示为文件名的一部分。

#  Defines the current year     
y=$(date +'%Y')
# Choose which months to be merged
for i in {06..10}
  do
  # Defines year and month
   ym=$(date +'%Y')"$i"
   # monthly
   awk 'FNR==NR||FNR>2' /ibv_ftp/merged/folder/file"$ym"*.csv > /ibv_ftp/merged/monthly/file"$ym".csv
done

脚本调用 /ibv_ftp/merged/folder/file201910*.csv 或 file201910[01-31].csv 或 file201910??.csv 以前的脚本确实有效。它使用不同的文件,如下所示:

today=$(date +'%Y%m%d')
echo $today
# daily

awk 'FNR==NR||FNR>2' /ibv_ftp/folder/iv1_"$today"_*.csv > /ibv_ftp/merged/daily/folder/file"$today".csv

在此示例中,文件名为 iv1_20191030_111500.csv(最后一部分是时间戳)

答案1

该错误告诉您没有任何内容与该模式匹配/ibv_ftp/merged/folder/file201910*.csv。 (这样做是因为当 shell 无法扩展通配符时,例如*它通常将其保留为文字。)

查看您所说的有效代码,源模式以/ibv_ftp/folder/非工作代码使用的位置开始/ibv_ftp/merged/folder/

相关内容