【发布时间】:2020-03-02 20:38:42
【问题描述】:
我在删除文件中的某些特定行时遇到了麻烦,但这并不是那么简单。问题要求搜索然后保存特定日期和时间的行,例如2008-06-08 和12:40:53.90 AM,直到用户想要的日期,这是一个读取变量输入$dayy。真正的问题是我想要在12:40:53 之后更大的行,直到如果$dayy 是例如2008-06-12 我需要在特定时间12:40:53.90 之前存在的行,恰好在4 天之后。我使用了下面的 bash 代码和最后一个 awk 命令,我想删除那天 ($dayy) 的行,它们的时间在 12:40:53.90 之后,但它删除了该日期的所有行。如果您能帮上忙,我将不胜感激。
例如,如果第一天是 2008-06-08 (spec_date) 和时间 12:40:53.90 (timee) 那么我想要从那天开始的所有行,直到两天后的同一时间 2008-06-10 ( dayy)
read dayy ; read spec_date ; read timee ;
awk -v dayy $dayy -v spec_date=$spec_date -v timee=$timee '{ if($1 >=spec_date && $2>=timee && $1 <= dayy) print $0}' ex1.dat > ex2.dat
awk -v dayy=$dayy '! ( $1==dayy && $2 ="[12-23]:[0-59]:[0-59].[0-50]")' ex2.dat
我的数据示例
2008-06-08 12:40:53.90
2008-06-08 12:43:39.80
.......................
2008-06-11 **12:39:34.22**
2008-06-11 13:21:23:43
【问题讨论】:
-
用于匹配正则表达式的
awk运算符是~,而不是=。而[0-59]不是您匹配范围内数字的方式。 -
请参阅stackoverflow.com/questions/22130429/…,了解如何为数字范围编写正则表达式。