http://man.linuxde.net/awk 參考linux
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
循環判斷類
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-shell
for((i=1;i<=10;i++));
do
echo $(expr $i \* 3 + 1);
done 數組
條件 雙括號 用分號分開,分別是 初始值;範圍;變化 for do done.net
if [ -f "$FILE" ];then
echo "OK"
else
echo "error $FILE" > error.log
mail -s "$FILE backup fail" test123@jb51.net <error.log
fi排序
開頭結尾 用if --- fi 條件後; if ;then else fiutf-8
while [ "$var" != "by" ]input
do數學
echo "you input a char $var "it
read vartest
done
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
命令類
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
sort -t : -n -k 1 new.txt (-t 分隔符 -n 以純數字 -k 第幾個域 -u 去重 -r 逆排序,-f 忽略字母大小寫 -o file)
1:hello
2:hehe
8:exit
10:haha
11:nihao
12:hello
cut -d' ' -f 1 filename (-d 分隔符 -f 第幾個域 -c 字符 -b 字節 utf-8 3個字節一個漢字)
sed -n "1p" file (-n p搭檔使用 顯示第幾行 a下一行增長 i 上一行加 s 替換 "s/^s/title/g" d 刪除)
date -d "19700102 08:00:00" +%Y-%m-%d:%H:%M:%S
1970-01-02:08:00:00
date -s "20171111 11:02:00"
uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ -Fields ] [ +Characters ] [ InFile [ OutFile ] ]
-c 在輸出行前面加上每行在輸入文件中出現的次數。
-d 僅顯示重複行。
-u 僅顯示不重複的行。
-f Fields 忽略由 Fields 變量指定的字段數目。
-s Characters 忽略由 Characters 變量指定的字符的數目
cut -d':' -f 2 new.txt |sort -r |uniq -c -d
2 nihao
2 hello
2 hehe
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
正則類
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
基礎的 * , \<\> , \{n,m\} ,擴展的+, ?, 都是其前面的字符重複次數 《<<<重點《<<<<
#例子 new.txt
12:hello
2:hehe
10:haha
11:nihao
1:hello
20:nihao
19:hehe
8:exit
23.bay
$grep -e '^[1-9]:.*[t]$' new.txt <<<<<例子<<<<
8:exit
grep -e "\<ni\>" new.txt <<<<<例子<<<< \<ni\> 要完整的詞!!!
結果找不到
$ sed 's/ni/\*/g' new.txt |grep -e '\<hao\>' <<<<<例子<<<< 單詞前面是*這樣能夠
11:*hao
20:*hao
$sed "s/[:.]/\+/g" new.txt <<<<<例子<<<<
12+hello
2+hehe
.....
23+bay
$ sed "s/[l]\{2\}/\*\*/g" new.txt <<<<<例子<<<<
12:he**o
2:hehe
$ sed 's/ni/\*/g' new.txt <<<<<例子<<<<
...
11:*hao
...
$ awk -F[:] '{ print $1,'\t',$2 }' new.txt |$awk -F: '{ print $1"\t"$2 }' new.txt <<<例子的區別<<<<<<
12 hello |12 hello
2 hehe |2 hehe
.... |....
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
awk -F: '/root/{print $7}' /etc/passwd
awk '/root/' /etc/passwd == grep -e 'root' /etc/passwd
$awk -f awk.sc new.txt
#awk.sc
BEGIN{ FS=":";OFS="-";print "begin";count=0 } #開始執行,count 爲計數器
{ print count"\t"$0;count=count+1 } #執行中,若是print 「」語句跟; 那麼會分行打印。沒讀一行,count會加1
END { print "end";print "lines="count } #執行完後,計數器打印出來。
$ awk 'BEGIN { a=5;print sin(a),cos(a),log(a),a^2,a++,a*2,sqrt(5),a+=1,a%2,rand() }'<<<<<<<例子<<<<<<數學運算!!
-0.958924 0.283662 1.60944 25 5 12 2.23607 7 1 0.237788(同一條執行的話隨機數固定)
awk 中的數組
關鍵字有 length()數組長度 asort() 排序 split()分割
數組不用初始不用賦值
++S['name'] 能夠作爲分類計數 有一個name域 記錄一次
$ awk -F[:.] '{++S[$2]}END {for(i in S) print i,S[i]}' new.txt <<<<<例子<<<<
exit 1
nihao 2
bay 1
hehe 2
haha 1
hello 2
sort cut awk 的域符號!!!!sort -t':' -k 1cut -d':' -f 1awk -F[:.] { print $1 } <<<<<例子<<<< [正則 : 或 .] 若是用‘’ 不支持 sort或cut也不支持