숫자 목록이 정렬되어 있는지 확인하는 방법은 무엇입니까?

숫자 목록이 정렬되어 있는지 확인하는 방법은 무엇입니까?

목록 파일의 숫자가 증가하는지 확인하는 방법은 무엇입니까?

예시 목록 1:

658
659
663

"알았어"를 얻을 것이다.

예시 목록 2:

658
664
663

"실패"가 발생합니다.

예시 목록 3:

23
24
25
26

"알았어"를 얻을 것이다.

답변1

이를 사용하여 sort -nc filename파일이 증분 순서(숫자만 포함)인지 확인할 수 있습니다.

sort -n -c filename >/dev/null 2>&1 && echo "OK" || echo "FAIL"

또는 짧게( 위의 -C" " 참고 like -c, but do not report first bad line) -u엄격한 오름차순을 확인하는 옵션과 제안된 대로 더 많은 숫자 형식(예 : , , , , ... ) -g을 지원하는 옵션 도 사용합니다.+20x101.2e+3infinity@StéphaneChazelas:

sort -guC filename && echo "OK" || echo "FAIL"

노트:동일한 번호의 중복에 대해 "실패"를 보고하지 않으려면 -u위 옵션을 무시하세요.

답변2

awk 'BEGIN {res = "OK"}
     NR > 1 && $1 <= prev {res = "Fail"; exit}
     {prev = $1}
     END {print res}'  file

이 awk 솔루션이 작동해야 합니다. 변수를 res처음부터 "OK"로 설정하고 prev해당 변수를 기반으로 파일에서 첫 번째 공백으로 구분된 필드를 확인합니다. 이 행이 $1이전 행보다 작 으면 res으로 설정 Fail하고 읽기를 중지합니다. 마지막으로 res스크립트 끝에 변수를 인쇄합니다 .

답변3

또 다른 비결은join주문하다:

join --check-order file file &>/dev/null && echo "OK" || echo "FAIL"

시험:

$ cat a1
11
33
22
$ join --check-order a1 a1 &>/dev/null && echo "OK" || echo "FAIL"
FAIL

$ cat a2
11
22
33
$ join --check-order a2 a2 &>/dev/null && echo "OK" || echo "FAIL"
OK

관련 정보