1、將時間轉換為時間戳
select unix_timestamp('2009-10-26 10-06-07')
如果參數為空,則處理為當前時間
2、將時間戳轉換為時間
select from_unixtime(1256540102)
有些應用生成的時間戳是比這個多出三位,是毫秒表示,如果要轉換,需要先將最后三位去掉(標准的10位數字,如果是13位的話可以以除以1000的方式),否則返回NULL
1.將IP地址轉化為數字
select inet_aton('210.30.0.103');
2.將數字轉化為IP地址
select inet_ntoa(3525181543);
隨機取用戶
cat file1 | awk '{ print rand(),$1 }' |sort -k1 |awk '{ print $2 }' |head -4000
分組求和
awk '{s[$1] += $2}END{ for(i in s){ print i, s[i] } }' file1 > file2
以第一列 為變量名 第一列為變量,將相同第一列的第二列數據進行累加 打印出和

awk '{s[$1" "$2] += $3}END{ for(i in s){ print i, s[i] } }' file1 > file2
以第一列和第二列為變量名, 將相同第一列、第二列的第三列數據進行累加 打印出和

awk '{s[$1] += $2; a[$1] += $3 }END{ for(i in s){ print i,s[i],a[i] } }' haha.txt
如果第一列相同,則根據第一列來分組,分別打印第二列和第三列的和

匹配
1、匹配交集項
awk 'NR==FNR{a[$1]=1}NR>FNR&&a[$1]>0{print $0}' file1(字段:QQ) file2(字段:QQ 點券值 ) > file3
如果file1、file2中,2個文件的第一列值相同,輸出第2個文件的所有列
注意:數據量如果達到4Gb以上或者行數達到一億級別,建議將file2進行split分割,否則就算是32G的內存的機器都會被吃掉;

awk 'NR==FNR{a[$1" "$2]=1}NR>FNR&&a[$1" "$2]>0{print $0}' file1 file2> file3
如果file1、file2中,2個文件的第一列第二列值相同,輸出第2個文件的所有列

2、匹配非交集項
awk 'NR==FNR{a[$1]=1}NR>FNR&&a[$1]<1 {print $0}' file1 file2 > file3
針對2個文件的第一列做比較,輸出:在file2中去除file1中第一列出現過的行

第二種方法:
cat file1 file2|sort |uniq -d > jiaoji.txt
cat file2 jiaoji.txt |sort |uniq -u > file3
取最大值、最小值
1、針對(2列的文件)
awk '{max[$1]=max[$1]>$2?max[$1]:$2}END{for(i in max)print i,max[i]}' file
第一列不變,取第二列分組最大值
awk '{if(!min[$1])min[$1]=20121231235959;min[$1]=min[$1]<$2?min[$1]:$2}END{for(i in min)print i,min[i]}' file
第一列不變,取第二列分組最小值
2、針對單列的文件
awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}' file2
awk 'BEGIN {min = 1999999} {if ($1<min) min="$1" fi}="" end="" {print="" "min=", min}' file2
求和、求平均值、求標准偏差
求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
求標准偏差
cat $FILE | awk -v ave=$ave '{sum+=($1-ave)^2}END{print sqrt(sum/(NR-1))}'
整合行和列
1、列換成行
如果第一列相同,將所有的第二列 第三列 都放到一行里面
awk '{qq[$1]=qq[$1](" "$2" "$3)}END{for(i in qq)print i,qq[i]}'

2、合並文件
2個文件,每個2列,將他們按照第一列相同的數,來合並成一個三列的文件,同時,將每個文件中針對第一列對應第二列中沒有的數補0
awk 'FNR==NR{a[$1]=$2}FNR<nr{a[$1]?a[$1]=a[$1]" "$2:a[$1]="a[$1]"" 0="" "$2}end{for(i="" in="" a)print="" i,a[i]}'="" file1="" file2=""> file3
注意點:文件2 一定要比文件1 的行數小

3、2個文件,每個3列,將他們按照第一列、第二列相同的數,來合並成一個4列的文件,同時,將每個文件中針對第一列、第二列對應第3列中沒有的數補0
awk 'FNR==NR{a[$1" "$2]=$3}FNR<nr{a[$1" "$2]?a[$1"="" "$2]="a[$1"" "$2]"="" "$3:a[$1"="" 0="" "$3}end{for(i="" in="" a)print="" i,a[i]}' ="" file<="" span="">
4、將列換成行,遇到空行,另起下一行
awk 'begin {RS=""} {print $1,$2,$3} file1
5、某列數字范圍篩選
cat canshu |while read a b
do
awk '{ if ($2>'"$a"' && $2<='"$b"' ) print $1}' result.txt > "$a"_"$b"_result.log
done
注意點:awk使用函數時,使用'"$a"'(先單引號,后雙引號)
集合類

1、集合交
cat fileA fileB |sort |uniq –d > result.log
2、集合差
cat fileA fileB |sort |uniq -d > jiaoji.txt
cat fileA jiaoji.txt |sort |uniq -u > result.log
3、集合全集去重
cat fileA fileB |sort -u > result.log
3、集合全集不去重
cat fileA fileB |sort > result.log
原地址:http://blog.chinaunix.net/uid-29792372-id-5074189.html
