Shell脚本的适用场景咨询

zgw06629 发布于 2015/06/28 17:55
阅读 169
收藏 0

想用shell脚本生成如下形式的数组,

[3 4 5 2 3 4 5]

即仅有一个元素出现一次,其余元素出现两次,再将生成的数组输出到文件中.

shell脚本如下:

#! /bin/bash
#通过命令行指定数组大小
N=$1
#输出文件名
filename=uniq_test.txt
if [ -f $filename ]; then
    rm $filename
fi
arr=()
echo "Start generate random array..."
#生成满足条件的(随机)数组
for ((i=0; i<$N-1; i+=2)); do
    if (($RANDOM%2==0)); then
        arr[i]=$i
        arr[i+1]=$i
    else
        arr[i]=$((i+1))
        arr[i+1]=$((i+1))
    fi
done
echo "Finished generate array"
arr[N-1]=$N
echo "Start shuffle..."
#打乱数组顺序
for ((i=0; i<$N; i+=2)); do
    t=${arr[i]}
    j=$((i+$RANDOM%($N-i)))
    arr[i]=${arr[j]}
    arr[j]=$t
done
echo "Finished shuffle."
echo "Start convert array to string..."
#将数组拼接成字符串
num=${#arr[@]}
for ((i=0; i<num; i+=1)); do
    alllines=${arr[i]}"\n"$alllines
done
echo "Finished converting."
echo "Start write to file..."
#delete the last \n
alllines=${alllines%\\n}
#写入到文件
echo -e $alllines > $filename
echo "Done"

发现数组大小仅为50001时,就需要花费real 2m17.400s. 而用Java代码生成1000001行的文件也是瞬间的事情.

是否这种Cpu密集型的工作就不适合用Shell来完成呢?那么Shell脚本又适合什么样的场景呢?

无可否认, Shell脚本真的很难写,性能又是这么糟糕的话, 我想还有必要学习Shell脚本吗?

加载中
0
crazyvv
crazyvv
脚本哎..你和java比肯定不好比..那你要是汇编写的好,效率比java还高,  你是用java写还是用汇编写呢.
不复杂,简单的.用脚本快速处理掉就行了, 大部分的脚本应用,效率是在可接受范围的
0
zgw06629
zgw06629

用脚本生成满足上述要求的文件, 也可以很方便,如下所示:

$ seq 1 2 10 
1
3
5
7
9
$ seq 1 2 10 > temp.txt
$ seq 1 2 10 >> temp.txt
$ echo 11 >> temp.txt
$ cat temp.txt 
1
3
5
7
9
1
3
5
7
9
11
$ shuf temp.txt
7
3
5
11
1
1
5
9
7
9
3
$ shuf temp.txt > temp_shuf.txt
$ sort -n temp_shuf.txt | uniq -u
11



返回顶部
顶部