首页 > 解决方案 > 使用 sed 或 awk 删除直到正则表达式的行

问题描述

我想使用 sed 或 gawk/awk 命令来查找正则表达式:

TRAFFIC

并将其与以下 unix 命令或类似命令结合使用,使 sysdate 减去一天:

date "--date=${dataset_date} -${date_diff} 1 day" +%d%b%Y

然后删除 regexp 和 sysdate 之间的所有行减去一天。

文件输入示例:

TYPE = REGIONAL                              (keep)
TRAFFIC AND LOGISTICS                        (keep)
                                             (delete)
DATE                                         (delete)
01AUG18                                      (delete)
TIME          TRA            NDFV            (delete)
00:00-00:15    0.00           0              (delete)
00:15-00:30    0.00           0              (delete)
00:30-00:45    0.00           1              (delete)
DATE                                         (delete)
02AUG18                                      (keep - sysdate minus one day)
TIME          TRA            NDFV            (keep)
00:00-00:15    0.00           2              (keep)
00:15-00:30    0.00           0              (keep)
00:30-00:45    0.00           0              (keep)
00:45-01:00    0.00           0              (keep)

文件输出示例:

TYPE = REGIONAL
TRAFFIC AND LOGISTICS
02AUG18    
TIME          TRA            NDFV 
00:00-00:15    0.00           2   
00:15-00:30    0.00           0   
00:30-00:45    0.00           0   
00:45-01:00    0.00           0  

在这种情况下02AUG18,将是 sysdate 减去一天。通常,regexp 和 sysdate 之间会有更多的行要删除。是否可以组合一个命令,例如:

sed '/TRAFFIC/,/ [sysdate minus one day] /d'

标签: awksed

解决方案


试试 awk:

d=$( date -d yesterday "+%d%b%y" | tr '[:lower:]' '[:upper:]' )
awk -v date="$d" '$1 == date {del = 0}; !del; /TRAFFIC/ {del = 1}'

推荐阅读