首页 > 解决方案 > 使用 grep 或 awk 仅提取 4 天的行

问题描述

您好,我有一个包含以下条目的文本文件

MySql-DataBase-2020-09-22_120712.zip
MySql-DataBase-2020-09-22_120947.zip
MySql-DataBase-2020-09-23_153159.zip
MySql-DataBase-2020-09-23_153434.zip
MySql-DataBase-2020-09-24_053634.zip
MySql-DataBase-2020-09-24_053910.zip
MySql-DataBase-2020-09-25_053255.zip
MySql-DataBase-2020-09-25_053530.zip
MySql-DataBase-2020-09-26_055307.zip
MySql-DataBase-2020-09-26_055542.zip
MySql-DataBase-2020-09-27_063328.zip
MySql-DataBase-2020-09-27_063603.zi
MySql-DataBase-2020-10-01_210715.zip
MySql-DataBase-2020-10-01_210950.zip
MySql-DataBase-2020-10-02_033726.zip
MySql-DataBase-2020-10-02_034001.zip
MySql-DataBase-2020-10-03_064238.zip
MySql-DataBase-2020-10-03_064513.zip
MySql-DataBase-2020-10-04_043117.zip
MySql-DataBase-2020-10-04_043353.zip
MySql-DataBase-2020-10-05_050735.zip
MySql-DataBase-2020-10-05_051010.zip
MySql-DataBase-2020-10-06_073457.zip
MySql-DataBase-2020-10-06_073733.zip
MySql-DataBase-2020-10-07_033928.zip
MySql-DataBase-2020-10-07_034204.zip
MySql-DataBase-2020-10-08_014822.zip
MySql-DataBase-2020-10-08_015059.zip
MySql-DataBase-2020-10-09_033301.zip
MySql-DataBase-2020-10-09_033537.zip

我只想选择 [今天的日期 -4 天] 和 [到任何旧日期] 之间的文件

我试图搜索这样的东西,但找不到任何东西:(

任何人都可以帮助我使用任何 grep、awk 命令或任何可以做到这一点的小型 php 或 python 脚本吗?

标签: pythonphpunixawkgrep

解决方案


关于您的条目的一个非常好的做法的有趣之处在于有一个命名约定,最好的是您使用YYYY-MM-DD 日期格式。这种格式很有趣,因为您只需比较字符串值即可获得更新的字符串。例如,如果您有'2020-10-25',则它大于'2020-10-20'并且在时间上也较新。因此,您可以使用这样的简单字典比较:

import datetime
from datetime import timedelta  

#the file in which are the entries 
filename = 'your_file' 

#creating a start date by takin current date and subtracting 4 days
startDate = (datetime.datetime.today() + timedelta(days=-4)).strftime('%Y-%m-%d') 

endDate = '2020-10-08' #whatever date you want

startFile = 'MySql-DataBase-' + startDate
endFile = 'MySql-DataBase-' + endDate

#open the file and get all entries
with open(filename) as f:
    content = f.readlines()
myFiles = [x.strip() for x in content]

# Adding all the file that name is between startFile and endFile
res = [file for  file in myFiles if startFile < file < endFile]

print(res)

推荐阅读