如何检查列表文件中的数字是否在增加?
示例列表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
支持更多数字格式的选项(如+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
小于前一行,则设置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