我的示例代码在这里
#!/bin/bash
file="output2.txt"
numbers="$(cut -d',' -f2 output2.txt)"
lines="$(cut -f2 output2.txt)"
hours="$(cut -d',' -f1 output2.txt)"
array_numbers=( $numbers )
lines_array=( $lines )
hours_array=( $hours )
difference=$1
let range=$1-1000
for (( i = 0 ; i < ${#array_numbers[@]} ; i++ ))
do
let num=$(( 10#${array_numbers[$i+1]} - 10#${array_numbers[$i]} ))
if [ $num -gt $1 ]
then
echo ${lines_array[$i+1]} "and" ${lines_array[$i]} "has a difference more than $1"
elif [ $num -ge 0 ] && [ $num -lt $range ]
then
echo ${lines_array[$i+1]} "and" ${lines_array[$i]} "has a difference more than $1"
elif [ $num -le $1 ]
then
if [${hours_array[$i+1]} != ${hours_array[$i]}]
then
echo ${lines_array[$i+1]} "and" ${lines_array[$i]} "has a difference more than one second"
fi
fi
done
我再次使用相同的output2.txt:
12:43:40,317
12:43:40,318
12:43:40,332
12:43:40,333
12:43:40,334
12:43:40,335
12:43:40,336
12:43:40,337
12:43:40,338
12:43:40,339
12:43:40,353
12:43:40,354
12:43:40,356
12:43:40,358
12:43:40,360
12:43:40,361
12:43:40,362
12:43:40,363
12:43:40,364
12:43:40,365
12:43:40,382
12:43:40,384
12:43:40,385
12:43:40,387
12:43:40,388
12:43:40,389
12:43:40,390
12:43:40,391
12:43:40,404
12:43:40,405
12:43:40,406
12:43:40,407
12:43:40,408
12:43:40,409
12:43:40,410
12:43:40,412
12:43:40,413
12:43:40,414
12:43:40,415
12:43:40,428
12:43:40,429
12:43:40,431
12:43:40,432
12:43:40,433
12:43:40,434
12:43:40,435
12:43:40,436
12:43:40,437
12:43:40,438
12:43:40,440
12:43:40,443
12:43:40,458
12:43:40,459
12:43:40,460
12:43:40,461
12:43:40,462
12:43:40,463
12:43:40,464
12:43:40,465
12:43:40,466
12:43:40,479
12:43:40,480
12:43:40,481
12:43:40,482
12:43:40,483
12:43:40,484
12:43:40,485
12:43:40,486
12:43:40,487
12:43:40,501
12:43:40,503
12:43:40,504
12:43:40,505
12:43:40,506
12:43:40,509
12:43:40,510
12:43:40,511
12:43:40,512
12:43:40,513
12:43:40,514
12:43:40,515
12:43:40,517
12:44:40,518
我想要做的是将差值作为参数,如果存在超过100毫秒的值差,那么我想打印输出。部分
for (( i = 0 ; i < ${#array_numbers[@]} ; i++ ))
do
let num=$(( 10#${array_numbers[$i+1]} - 10#${array_numbers[$i]} ))
if [ $num -gt $1 ]
then
echo ${lines_array[$i+1]} "and" ${lines_array[$i]} "has a difference more than $1"
elif [ $num -ge 0 ] && [ $num -lt $range ]
then
echo ${lines_array[$i+1]} "and" ${lines_array[$i]} "has a difference more than $1"
实际上运作良好,但我意识到如果输入像上一部分一样有这样的列
12:43:40,517
12:44:40,518
它不会打印任何东西,所以我把最后一个elif语句放到我的代码中,但即使它打印hours_array好,但是当我比较它时它不起作用。输出总是:
script.sh:line 22:[12:43:00:找不到命令
为什么不接受这种比较或问题是关于我的bash版本?
提前感谢您的帮助。
答案 0 :(得分:1)
在[
之前和之后添加空格。这是一个别名&#39;到test
buitin命令。
您还应该在变量周围添加双引号"
。因为如果它们是空的,那么bash不会认为它们是空话。
我通常使用双括号[[
来测试条件,它更安全,功能更多。
示例:
if [[ "${hours_array[$i+1]}" != "${hours_array[$i]}" ]]
答案 1 :(得分:0)
[
后缺少空格。 [
是一个命令,因此需要将其与参数分开。
if [ ${hours_array[$i+1]} != ${hours_array[$i]} ]
答案 2 :(得分:0)
这里需要一个空格([
是一个命令)
if [ ${hours_array[$i+1]} != ${hours_array[$i]} ]
答案 3 :(得分:0)
我发现在此代码中可以更改的内容很少。
[
之后和]
之前添加空格。添加双引号,以便在变量为空的情况下,脚本不会抛出错误。
if [ "${hours_array[$i+1]}" != "${hours_array[$i]}" ]
当您到达最后一行时,$i + 1
将失败。因此,以下会更好。
for (( i = 0 ; i < ${#array_numbers[@]} - 1 ; i++ ))