shell 打亂文件行
來源:程序員人生 發布時間:2015-06-11 09:07:52 閱讀次數:4504次
思路,產生1個隨機數組,然后按依照數組的元素將文件中行的重新輸出
1、隨機數組的生成
看書的時候感覺很是簡單。第1次用卻有點無從下手。
首先是定義,shell中的變量是弱變量,可以隨時定義。
arr=(`seq 57`)
創建1個1..57的1個數組,注意1定要加括號,否則定義不成數組。
也能夠使用for循環的方式為數組動態賦值。
for ((i=0;i<57;i++)) #有空格
do
arr[$i]=$(($i+1))
done
再次是產生隨機數
使用內部變量$RANDOM,產生的是0⑶2767。
#!/bin/bash
arr=(`seq 57`)
let "a=$RANDOM%57"
let "b=$RANDOM%57"
echo "a="$a
echo "b="$b
tmp=${arr[$a]}
arr[$a]=${arr[$b]} #賦值的時候arr[$a],不要寫成${arr[$a]}
arr[$b]=$tmp
echo ${arr[@]}
將上面的進程循環10000次
44 13 48 53 22 15 35 28 1 31 8 49 4 34 6 55 20 32 26 40 18 37 16 43
9 27 25 42 2 3 50 11 56 46 24 41 7 12 54 30 45 47 17 23 33 10 51 19
52 38 57 14 29 36 39 5 21
2、打亂文件行
#!/bin/bash
arr=(`seq 57`)
for ((i=0;i<10000;i++))
do
let "a=$RANDOM%57"
let "b=$RANDOM%57"
tmp=${arr[$a]}
arr[$a]=${arr[$b]}
arr[$b]=$tmp
done
#echo ${arr[@]}
for i in ${arr[@]}
do
j=0
while read line #注意讀取文件的寫法
do
((j++))
if [ "$i" -eq "$j" ];then
echo "i=$i,j=$j:$line"
echo $line >> list1.txt
break
fi
done < backup.txt
done
通過上述的腳本,感覺即便把書看完了,知道了1些東西,還是不行,重要的是不停的練習。即便是很簡單的東西,如數組,if判斷等,不寫用的時候只能是眼高手低,無從落筆。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈