我正在尝试开发一个bash脚本,用于过滤前一天的csv文件(每小时生成一次)并将它们合并到一个CSV文件中。 This脚本似乎对我有用,除了我尝试根据文件名过滤文件。
目录中每天会有24个文件,我需要根据其名称格式过滤掉这些文件:
foofoo_2017052101502.csv
foofoo_2017052104502.csv
foofoo_2017052104503.csv
foofoo_2017052204501.csv
foofoo_2017052204504.csv
在这里,我需要过滤掉2017年5月21日。因此,我的输出CSV文件必须包含前三个.csv
文件。
我应该在此过滤器的脚本中添加什么内容?
答案 0 :(得分:1)
您可以bash
让May 21, 2017
为您进行过滤,例如,仅列出您可以使用日期for filename in foofoo_20170521*.csv; do...
的文件:
for filename in "foofoo_${1}*.csv"; do...
如果您希望能够使用指定日期的参数调用脚本以获得更大的灵活性,则可以使用:
./your_script 20170521
然后使用要作为参数过滤的日期调用脚本:
cat foofoo_20170521*.csv > combined_20170521.csv
正如@David C. Rankin在评论中提到的那样,一个非常实用的方法是将你想要的日期中的所有文件连接到一个csv中,然后在脚本中使用它们:
{{1}}
答案 1 :(得分:1)
以下脚本将计算前一天的yyyymmdd,并在grep中使用该值自动过滤掉前一天生成的所有文件名。
对于MacOS
dt=`date -j -v-1d +%Y%m%d`
echo $dt
OutputFiles=`ls | grep foofoo_${dt}`
对于Linux
dt=`date -d "yesterday" +%Y%m%d`
echo $dt
OutputFiles=`ls | grep foofoo_${dt}`
添加到上述脚本时,这些命令将根据当前时间戳过滤前一天的文件名。