数据需求统计常用shell命令
一、时间和时间戳的转换
1、将时间转换为时间戳
select unix_timestamp('2009-10-26 10-06-07')
如果参数为空,则处理为当前时间
2、将时间戳转换为时间
select from_unixtime(1256540102)
有些应用生成的时间戳是比这个多出三位,是毫秒表示,如果要转换,需要先将最后三位去掉(标准的10位数字,如果是13位的话可以以除以1000的方式),否则返回NULL
execl函数:
(B2+8*3600)/86400+70*365+19, B2代表要转换的时间,单元格属性改为日期格式
二、IP地址和数字之间的转换
select inet_aton('');
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] } }'
如果第一列相同,则根据第一列来分组,分别打印第二列和第三列的和
匹配
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个文件的所有列
FNR技技a[$l'"'$2〕>0{p户int$0}尹犷iles于ile6 到 7渊 8l" src="http://avocado./fconv/files/201304/3a523a9f0cee0a3f5418d2fb3adc2182.
常见shell操作 来自淘豆网m.daumloan.com转载请标明出处.