问题:
随机输出目录下5个文件:
解法:
1.
BASH:
-
#! /bin/bash
-
arr=($(ls *.sql.gz))
-
len=$((${#arr[@]}+1))
-
-
for((i=1;i<6;i++))
-
do
-
RANDOM=$(($$+i))
-
echo ${arr[$((RANDOM%len))]}
-
done
这种方法有可能会产生重复的文件。
2.
BASH:
-
ls * 'BEGIN {srand()} {A[NR]=$0;} END {for(i=0;i<5;++i) { n=int(rand()*FNR)+1; print A[n]} }'
同样这个也有可能重复。
3.
BASH:
将600个同一目录下的文件随机分成3份,每份200个:
解法:
1.
BASH:
-
ls | awk 'BEGIN{srand();b[1]="path1";b[2]="path2";b[3]="path3"}{a[rand()" "NR]=$0}END{for(i in a){if(k++%200==0) j++;print "mv "a[i]" "b[j]}}' | sh
对这样的代码进行缩进:
解法:
1.
BASH:
-
awk '/}/{flag--}{if(flag>0) for(i=1;i<=flag;i++) printf "\t";print}/{/{flag++}'
打印字符串hello上下两行,不允许使用grep.
解法:
1.
BASH:
-
awk -v n=2 '{a[NR%n]=$0}/hello/{for(i=NR-n+1;i<=NR;i++) if(i>0) print a[i%n];i=0;while(i<n && getline){print;i++}}'
查看23号15点到24号13点之间的系统日志:
sudo cat /var/log/messages | awk '$2" "$3 >= "23 15:00:00" && $2" "$3 <= "24 13:00:00"'