我一直在尝试让脚本将所有 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/
。