数値リストがソートされているかどうかを確認するには?

数値リストがソートされているかどうかを確認するには?

リストファイルの数が増えるかどうかを確認するには?

例リスト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

関連情報