2008年07月24日

问题:
随机输出目录下5个文件:

解法:
1.

BASH:
  1. #! /bin/bash
  2. arr=($(ls *.sql.gz))
  3. len=$((${#arr[@]}+1))
  4.  
  5. for((i=1;i<6;i++))
  6. do
  7.         RANDOM=$(($$+i))
  8.         echo ${arr[$((RANDOM%len))]}
  9. done

这种方法有可能会产生重复的文件。
2.

BASH:
  1. ls * 'BEGIN {srand()} {A[NR]=$0;} END {for(i=0;i<5;++i) { n=int(rand()*FNR)+1; print A[n]} }'

同样这个也有可能重复。
3.

BASH:
  1. ls *sql.gz | 'BEGIN{srand()}{a[rand()" "NR]=$0}END{for(i in a) {print a[i];if(++j==5) break}}'

将600个同一目录下的文件随机分成3份,每份200个:

解法:
1.

BASH:
  1. ls | '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

对这样的代码进行缩进:

C:
  1. void func1()
  2. {
  3. if()
  4. {
  5. }
  6. return;
  7. }
  8.  
  9. void func2()
  10. {
  11. if()
  12. {
  13. }
  14. return;
  15. }

解法:
1.

BASH:
  1. '/}/{flag--}{if(flag>0) for(i=1;i<=flag;i++) printf "\t";print}/{/{flag++}'

打印字符串hello上下两行,不允许使用grep.

解法:
1.

BASH:
  1. -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 | '$2" "$3 >= "23 15:00:00" && $2" "$3 <= "24 13:00:00"'

标签 :

发表评论

在下面加入你的评论,或者 trackback 从你的博客站点。 订阅本文的评论。

:

:

:

« shell脚本解题4
» 过自己的生活