基于文件名过滤器合并CSV文件

时间:2017-06-23 17:02:25

标签: bash csv

我正在尝试开发一个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文件。

我应该在此过滤器的脚本中添加什么内容?

2 个答案:

答案 0 :(得分:1)

您可以bashMay 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}`      

添加到上述脚本时,这些命令将根据当前时间戳过滤前一天的文件名。