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