【问题标题】:Get List of All Lines within the date range获取日期范围内所有行的列表
【发布时间】:2021-01-25 16:20:54
【问题描述】:

我有一个包含如下条目的日志文件:

24/09/20 | 11:22:56am | Server1  | Backup Done
28/09/20 | 10:44:05am | Server1  | Error in Config File
10/10/20 | 04:22:10am | Server1  | Error in Config File

我怎样才能只提取它们之间的行

[今天的日期] [今天的日期 - 30 天]

在网上搜索后,我发现这个命令可以工作,但它给出了一个错误。

sed -n "/$(date --date='-30 day' '+%d/%m/%y')/,/$(date +'%d/%m/%y')/p"

错误

cat logs.txt | sed -n "/$(date --date='-10 day' '+%d/%m/%y')/,/$(date '+%d/%m/%y')/p"
sed: -e expression #1, char 5: unknown command: `1'

谁能帮我只提取从当前日期起 30 天前的行。

【问题讨论】:

    标签: shell awk grep


    【解决方案1】:

    使用 GNU date 获取 30 天前的日期。

    然后将格式反转为%y%m%d,以便与awk 进行字母比较。

    start=$(date --date='30 days ago' +'%y%m%d')
    awk -v start="$start" '{split($1, a, "/")} a[3]a[2]a[1] >= start' file
    

    注意:通常,可以直接排序或比较的日期格式,如ISO 8601 date 等字符串或Unix timestamp 等数字,应优先用于带时间戳的文件。

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      相关资源
      最近更新 更多