출력을 생성하는 프로세스가 있습니다.최대(타임스탬프) 필드를 기준으로 사전순으로 정렬하지만 행이 잘못된 순서로 출력되는 경우도 있습니다.
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
쉘 문자열 비교라고 생각합니다~해야 한다(물론 현재 로케일에 따라) 사전식 순서를 존중합니다. 따라서 다음과 같은 작업을 수행할 수도 있습니다.
#!/bin/bash
lastline=""
while IFS= read -r line; do
[[ "$line" < "$last" ]] && printf '%s\n' "$line"
last="$line"
done < <(your process)