У меня есть каталог hdfs с большим количеством файлов и каталогов в следующем формате.
-rw-rw-rw- 3 root xyz <filesize> 2015-04-12 00:34 file1
-rw-rw-rw- 3 root xyz <filesize> 2015-04-11 11:34 file2
-rw-rw-rw- 3 root xyz <filesize> 2015-04-09 09:54 file3
drwxrwxrwx 3 root xyz 0 2015-04-02 00:34 dir
У меня есть один скрипт awk, который фильтрует файлы из списка, используя
awk '{ if($1 !~ /d.*/ ) {print $0}}'.
Я использую это в функции C ++, которая имеет две отметки времени в date(yyyy-mm-dd)
а также time (hh:mm:ss)
формат.
Я хотел бы поместить условие ‘if’ в ‘awk’, которое может фильтровать файлы, находящиеся между двумя временными метками.
Я пытался делать
($6 >= startDate) && ($6 <= endDate) && ($7 >= startTime) && ($7 <= endTime)
,
но это не работает, как ожидалось. Я новичок в awk.
Ты можешь использовать find
чтобы упростить это.
find . -newermt "$dt1" ! -newermt "$dt2"
Вот сценарий оболочки, который я использовал для тестирования. Если вы можете передать аргументы из вашего кода C ++, вы можете сократить это до одной строки с помощью только команды find.
# Date 1
startDate=2015-04-11
startTime=21:10:00
dt1="$startDate $startTime"
# Date 2
endDate=2015-04-11
endTime=22:10:00
dt2="$endDate $endTime"find . -newermt "$dt1" ! -newermt "$dt2"
Примечание: я предполагаю, что начальная дата и время начала идут вместе, а конечная дата и время окончания идут вместе. Но у вас есть свобода выбора.