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

jan*_*ngo 7 sed awk sort

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

示例列表 1:

658
659
663
Run Code Online (Sandbox Code Playgroud)

会得到“好的”。

示例列表2:

658
664
663
Run Code Online (Sandbox Code Playgroud)

会得到“失败”。

示例列表3:

23
24
25
26
Run Code Online (Sandbox Code Playgroud)

会得到“好的”。

αғs*_*нιη 13

您可以使用sort -nc filename来验证文件是否按递增顺序排列(仅包含数字)。

sort -n -c filename >/dev/null 2>&1 && echo "OK" || echo "FAIL"
Run Code Online (Sandbox Code Playgroud)

或者简而言之(注意上面的-Clike -c, but do not report first bad line”),还使用-u选项来检查严格的升序以及@StéphaneChazelas建议的-g支持更多数字格式的选项(如+2, 0x10, 1.2e+3, infinity, ... ):

sort -guC filename && echo "OK" || echo "FAIL"
Run Code Online (Sandbox Code Playgroud)

注意:如果您不想在重复的相同数字上报告“失败”,请省略-u上面的选项。


Ram*_*pal 8

awk 'BEGIN {res = "OK"}
     NR > 1 && $1 <= prev {res = "Fail"; exit}
     {prev = $1}
     END {print res}'  file
Run Code Online (Sandbox Code Playgroud)

这个 awk 解决方案应该可以工作。res从一开始就将变量设置为 OK,然后根据变量检查文件中的第一个空格分隔字段prev。如果此行$1小于前一行,则设置resFail并停止阅读。最后在脚本的末尾,打印res变量。

  • @Kusalananda,我冒昧地修复了那部分。 (2认同)