按条目的时间戳对grep结果进行排名

时间:2020-01-08 02:15:24

标签: linux bash

我想按每个条目的时间戳对日志条目进行排名。

假设我的grep结果是这样的,每个条目在不同数量的列上具有不同数量的字段和时间:

a, 3, time:123
b, time:124, 4
c, time:122, 5

我应该如何通过管道传递结果,使其看起来像这样?

c, time:122, 5
a, 3, time:123
b, time:124, 4

2 个答案:

答案 0 :(得分:1)

请尝试以下方法:

while IFS= read -r line; do
   [[ $line =~ time:([0-9]+) ]] && printf "%s\t%s\n" "${BASH_REMATCH[1]}" "$line"
done < file | sort -n | cut -f 2-
  • 它首先提取time:子字符串之后的时间。
  • 然后使用制表符作为分隔符,在行之前预留时间。
  • 它对行进行数字排序。
  • 最后它切断了第一场。

答案 1 :(得分:1)

一般的解决方案是:

    每行
    • 检测日志格式
    • 根据检测到的格式提取时间戳记列
    • 将时间戳转换为可排序形式
    • 打印排序形式+列定界符+原始行
  1. 将上一阶段的输出通过管道输送到新的第一列中
  2. 将上一阶段的输出管道化为新的第一列