========================================================================
參考: http://vbird.dic.ksu.edu.tw/linux_basic/0340bashshell-scripts.php
========================================================================
1. $*, $@, $#, $0, $1, $?
指令碼名稱叫test.sh 入參三個: 1 2 3
運行test.sh 1 2 3後
$*為"1 2 3"(一起被引號包住)
$@為"1" "2" "3"(分別被包住)
$#為3(參數數量)
$0 : 指令碼全名
$1 : 第一個參數
$?用法:如果發現上一行的命令執行有誤,該指令碼就會終止執行
if [ $? -ne 0 ];then
fatal_log "fail execute!"
exit 1
fi
2. datefmt=`date +%Y%m%d`
echo $datefmt #20141209
datefmt=`date +%Y%m%d -d '-1 day'`
echo $datefmt #20141208
3. awk -F " " 'NR==FNR{a[$1]=1}NR>FNR{if(a[$1]){print $1,$2,"1";}else{print $1,$2,"0";}}' a.txt b.txt
其中:
a.txt:
12 guomei
23 nginx
44 hello
87 world
b.txt:
23 nginx
44 hello
77 world
結果:
23 nginx 1
44 hello 1
77 world 0
4. awk -F " " '$2 ~/name=dash/{print $0}' 20141001.log
用法說明
5.統計第二列總和(一列、二列用tab分割)
abc 12
ddd 234
xyz 87
cat test.txt | awk -F "\t" 'BEGIN{sum=0}{sum+=$2}END{print sum}'
6.按第二列去重
awk '{!a[$2]++}'
參考:http://bbs.chinaunix.net/thread-1837787-1-1.html
原理:
awk 文法: awk 'pattern{action}' , action預設是print
所以上面的語句等同於: awk'!a[$2]{print $0;a[$2]++}'
7. 求兩個檔案差集
grep -F -v -f b.txt a.txt | sort | uniq
求得是A-B
參考:http://blog.csdn.net/autofei/article/details/6579320
8. $var, ${var}, ${#var},$((算數運算式))
$var, ${var}都返回變數值,不過${var}去歧義
${#var}返回長度
$((1+2*5)) 返回11
9. du -s ./* | sort -nr
列出目前的目錄下檔案(夾)大小,降序排列,而不是遞迴計算檔案大小
10.shell裡可以對一個檔案內容一行一行讀取嗎然後對讀取的一行內容進行分割然後放到數組
http://bbs.chinaunix.net/thread-4117251-1-1.html
11. 以第一列+第二列為Key,計算第三列和
Tom Kobe 13
Jack John 22
Tom kobe 57
cat file.txt | awk -F " " '{a[$1" "$2]+=$3}END{for(i in a){print i" "a[i]}}'