如何检查数字列表是否已排序?

如何检查数字列表是否已排序?

如何检查列表文件中的数字是否在增加?

示例列表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"

或者简而言之(注意上面的-Clike -c, but do not report first bad line”),还使用-u选项来检查严格升序以及-g支持更多数字格式的选项(如+2, 0x10, 1.2e+3, infinity, ... )建议@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为“确定”,然后根据该prev变量检查文件中的第一个空格分隔字段。如果这一行$1小于前一行,则设置resFail并停止读取。最后在脚本末尾打印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

相关内容