說明:水平有限僅供參考python
查找當前目錄下文件大小大於100k的文件,而且修改日期爲3天內的文件,並將其移動到/tmpshell
方法一:find forvim
for i in `find . -type f -size +100c`;do mv $i /tmp;done
方法二:find exec,find xargsbash
find . -type f -size +100c -exec mv {} /tmp/ \; find . -type f -size +100c -mtime +3 |xargs -I '{}' mv {} /tmp/a
方法三:find awkdom
find . -type f -size +100c -mtime +3 |xargs -I '{}' ls {} | awk '{print "mv " $0 " /tmp/" }' |bash
知識點:ide
find中-exec與xargs的使用
測試
-size +表示大於,單位c表示k,m表示M
spa
mtime +表示多少天前,-表示多少天內
code
2.打印*的圖形,說明:執行./function 1 2 3 4 2 4,打印參數對應數字個*符號,例如排序
*
**
***
****
**
****
答:
python實現
# -*- coding:utf-8 -*- import sys def printstart(n): #打印指定個*符號 for i in xrange(n): sys.stdout.write("*") def main(): alist = sys.argv[1:] #將參數放入alist for i in xrange(len(alist)): #str轉換爲int alist[i] = int(alist[i]) for i in xrange(len(alist)): printstart(alist[i]) print if __name__ == "__main__": main()
知識點:
sys.agrv 是一個list,保存程序名和全部參數的值
shell實現
root@vmUbu:/home/dell/shell# cat shift.sh #/bin/bash while [ $# -ne 0 ] do for i in `seq $1` do echo -n "*" done echo shift done
測試
root@vmUbu:/home/dell/shell# ./shift.sh 1 2 3 4 2 4 * ** *** **** ** **** root@vmUbu:/home/dell/shell#
知識點
$1 第一個參數的值
$# 參數的個數
$@ 全部參數
shift 向前移動一個參數
3.打印access.log 排名前10的ip,和對應的user agent數
答:
shell實現
#awk '{print $1}' access.log |sort |uniq -c|sort -rnk 1 |head -n 10
#cat access.log |awk '{a[$1]++}END{for(i in a) print i,a[i]}' |sort -rnk 2 |head -n 10
疑問:對應user agent統計呢?
python實現
說明python實現優勢麻煩,僅當練習之目的。
import sys ip_dict={} filename = "access.log" with open(filename, "rb") as rf: for line in rf.readlines(): ip = str(line.strip("\n").split(" ")[0]) if ip not in ip_dict: ip_dict[ip] = 1 else: ip_dict[ip] += 1 #按值排序 sortedDict = sorted(ip_dict.iteritems(),key=lambda ip_dict:ip_dict[1],reverse=True) for key,value in sortedDict: print key, value
測試
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/HuaweiExcercise/mytest.py
10.9.40.134 16
10.9.40.135 6
10.9.40.131 2
Process finished with exit code 0
4.輸出隨機密碼,密碼長度必須大於6,必須包括至少一個大寫,至少一個小寫,至少一個數字
python實現
# -*- coding:utf-8 -*- import sys import random def main(): seed = "!@#$%&_1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" seedupper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" seedlower = "abcdefghijklmnopqrstuvwxyz" seednum = "1234567890" upper = random.choice(seedupper) lower = random.choice(seedlower) num = random.choice(seednum) n = 8 passwdtmp = "" for i in xrange(n-3): passwdtmp += random.choice(seed) passwd = upper + lower +num + passwdtmp print passwd if __name__ == "__main__": main()
shell實現
root@vmUbu:/home/dell/shell# vim randompasswd.sh echo $n #/bin/bash read -p "input a number:" n if [ $n -le 6 ] then echo "Error,input a number great than 6." exit fi upper=`tr -dc "A-Z" < /dev/urandom |head -c 1` lower=`tr -dc "a-z" < /dev/urandom |head -c 1` num=`tr -dc "0-9" < /dev/urandom |head -c 1` passwd=$upper$lower$num let n=$n-3 for i in `seq $n` do char=`tr -dc "[A-Z,a-z,0-9,!@#$%^&]" < /dev/urandom |head -c 1` passwd=$passwd$char done echo $passwd
測試
root@vmUbu:/home/dell/shell# ./randompasswd.sh input a number:8 Jy9kRBHC root@vmUbu:/home/dell/shell# ./randompasswd.sh input a number:9 Nj7lh0Ph# root@vmUbu:/home/dell/shell# ./randompasswd.sh input a number:10 He8I&eWzXu root@vmUbu:/home/dell/shell# ./randompasswd.sh input a number:5 Error,input a number great than 6. root@vmUbu:/home/dell/shell#