Список последнего сгенерированного файла на каждый день из списка 7 дней - PullRequest
0 голосов
/ 07 января 2012

У меня есть список файлов в следующем формате:

Group_2012_01_06_041505.csv
Region_2012_01_06_041508.csv
Region_2012_01_06_070007.csv
XXXX_YYYY_MM_DD_HHMMSS.csv

Каков наилучший способ составить список последних сгенерированных файлов для каждого дня для группы из списка последних 7 дней?

Версия, которая работала на HP-UX

for d in 6 5 4 3 2 1 0
do
    DATES[d]=$(perl -e "use POSIX;print strftime '%Y_%m_%d%',localtime time-86400*$d;")
done

for group in `ls *.csv | cut -d_ -f1 | sort -u`
do
    CSV_FILES=$working_dir/*.csv
    if [ ! -f $CSV_FILES ]; then
        break # if no file exists do not attempt processing
    fi
    for d in "${DATES[@]}"
    do
        file_nm=$(ls ${group}_$d* 2>>/dev/null | sort -r | head -1)
        if [ "$file_nm" != "" ]
        then
            # Process file
        fi
    done
done

1 Ответ

0 голосов
/ 07 января 2012

Вы можете явно перебирать комбинации группы / времени:

for d in {1..6}
do
    DATES[d]=`gdate +"%Y_%m_%d" -d "$d day ago"`
done

for group in `ls *csv | cut -d_ -f1 | sort -u`
do
    for d in "${DATES[@]}"
    do
        echo "$group $d: " `ls ${group}_$d* 2>>/dev/null | sort -r | head -1`
    done
done

Что выводит следующее для вашего примера набора данных:

Group 2012_01_06:  Group_2012_01_06_041505.csv
Group 2012_01_05: 
Group 2012_01_04: 
Group 2012_01_03: 
Group 2012_01_02: 
Group 2012_01_01: 
Region 2012_01_06:  Region_2012_01_06_070007.csv
Region 2012_01_05: 
Region 2012_01_04: 
Region 2012_01_03: 
Region 2012_01_02: 
Region 2012_01_01: 
XXXX 2012_01_06: 
XXXX 2012_01_05: 
XXXX 2012_01_04: 
XXXX 2012_01_03: 
XXXX 2012_01_02: 
XXXX 2012_01_01: 

Примечание Region_2012_01_06_041508.csv не отображается для региона 2012_01_06, поскольку он старше Region_2012_01_06_070007.csv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...