按客户要求校正某些数据

要点备忘

数组

array_name=(item1 item2 ... itemN)
使用时 array_name[N]

循环

用到了 for 和 while,格式分别是

for [表达式];do
done

while [表达式];do
done

变量类型转换 string to int

有awk之类几种方法,我用了最偷懒的。
先确保字符串变量本身没有奇怪的字符,只有阿拉伯数字(参考下文lines)
在进行逻辑运算的关键位置用 $(()) 包裹变量声明为数值

随机读取若干行

随机读10行

shuf -n 10 input_filename

脚本原文如下

#!/bin/bash    

tar_val=(648 770 425 450 360 627 630 600 656 861)
sum=0
for ((i=0;i<10;i++));do
    let sum+=tar_val[i]
    let lognum=i+1
    log="results_${lognum}.log"
    
    lines=$(cat ${log}| wc -l)
    
    while [ $((lines)) -lt $((tar_val[i])) ] ;do
        let nline=tar_val[i]-$((lines))
        if [ $((nline)) -gt 10 ];then
            let nline=10
        fi
        
        #写入
        shuf -n ${nline} ${log} >> ${log}
        shuf -n ${nline} ${log} >> results.log
        
        lines=$(cat ${log}| wc -l)
    done    
done

echo sum=$sum

unset sum i

标签: linux

添加新评论