识别无序的线路

识别无序的线路

我有一个生成输出的过程大多根据(时间戳)字段按字典顺序排序,但有时这些行会以错误的顺序输出:

2014-08-14 15:42:02.019220203 ok
2014-08-14 15:42:03.523164367 ok
2014-08-14 15:42:04.525655832 ok
2014-08-14 15:42:06.523324269 ok
2014-08-14 15:42:05.930966407 oops
2014-08-14 15:42:07.643347946 ok
2014-08-14 15:42:07.567283110 oops

如何识别数据“未排序”的每个位置?

预期输出(或类似输出):

2014-08-14 15:42:05.930966407 oops
2014-08-14 15:42:07.567283110 oops

我需要一个在数据生成时工作的解决方案(例如在管道中);如果它只对完整的文件进行操作,那么它的用处就较小。sort --check将是理想的,但它只输出第一的紊乱点;我需要一份完整的清单。

答案1

awk 'NR>1 && $0"" < last; {last=$0}'

打印排序在前一行之前的行。这$0""是强制词法比较(在它的输出上seq 10会发现10排序之前9)。

答案2

我认为 shell 字符串比较应该尊重字典顺序(当然,根据当前的语言环境) - 所以也许你可以做类似的事情

#!/bin/bash

lastline=""
while IFS= read -r line; do 
  [[ "$line" < "$last" ]] && printf '%s\n' "$line"
  last="$line"
done < <(your process)

相关内容