Shell脚本学习
今天hadoop集群在跑些大任务,所以没有资源给我用了
但是我又要查询hive上的一些数据,怎么办呢
把hive的数据拿到跳板机本地上来操作?
但是没有hive工具执行不了
还好有shell
文件的格式是这样的:
URL 访客数
我现在想统计一下访客数的分布情况
例如访客数为10个的URL有多少条等等
cat fan_table | awk -F '\001' '{print $2}' | head -5
又要工作要忙了,先暂停,以后继续写 2013-04-20
现有一文件的内容如下:
item like_item hot_a hot_b sup jaccard
2465668 1907187 31 26 2 0.03636363636363636
2465668 2225252 31 27 2 0.03571428571428571
2465668 2427279 31 31 2 0.03333333333333333
2465668 539532 31 31 2 0.03333333333333333
2465668 2443290 31 31 2 0.03333333333333333
2465668 235435 31 1 1 0.03225806451612903
2465668 230614 31 1 1 0.03225806451612903
要做的工作是取出每一个item以及对应的hot_a并将其去重后按照hot_a降序排序
cat dm_fan_photo_icf_result | awk -F '\001' '{print $1":"$3}' | sort -r -n -k 2 -t : | uniq > photo_hot.txt
上面的管道是这样执行的
1)cat 先读取文件
2)以'\001'以分隔符分割上面读取的文件,并输出第一列以及第三列,中间用“:"分隔
3)将2)的结果以":"(-t)分隔,然后取第二列(-k),再以数字类型(-n)进行降序排序(-r)
4)将排序后的结果进行去重(uniq)
5)将最终结果输出到文件
今天群里某人问一个查询特定条件的文件并对其大小求和的问题
试了一下, 貌似这样是可行的
ls -al *.txt | awk -F ' ' '{print $5}'|awk '{sum += $1}; END {print sum}'
=================没有分割线有点耍流氓-2015-6-29==================
今天再学了一招,切分数据,分组统计排序
cat stdout | awk -F '\t' '{print $3}' | awk -F ':' '{print $1,1}' | awk '{a[$1]+=$2}END{for(i in a)print i,a[i]}' | sort -r -n -k 2 | head -20
快速查找某个文件夹下包含某字符串的文件
# find <directory> -type f -name "*.c" | xargs grep "<strings>"
替换文件中的某些字符,并排序
cat test | xxx | tr '\002|\001' '\n' | tr '\003' ':' | sort -r -n -k 2 -t :
今天又学到一新技能了,按一定的频率做某个操作,例如每隔一秒输出某文件的行数
watch -n1 wc -l file
一个恶心的需求,需要先通过Mysql获取到数据,再组装入库到Hbase
mysql_sql=`cat user_define_similar_radio.txt | awk -F '###' '{print "SELECT CONCAT(\"#\",id) FROM lizhi_app.radio WHERE band = " $1 ";SELECT GROUP_CONCAT(CONCAT(id,\":1.0\")) FROM lizhi_app.radio WHERE band IN(" $2 ");"}'` mysql_path="mysql -N -uroot -xxxxxx -h 192.168.1.3"
get_radio=`echo"$mysql_sql" | ${mysql_path}`
#不知道什么鬼原因组装的执行语句有问题,所以用了新招,把某些字符删除
get_radio=`echo $get_radio | sed 's/T1//g' | sed 's/T2//g'`
num=`echo $get_radio | tr '#' '\n' | wc -l` for((i=2;i<=num;i++)) do hbase_insert=`echo $get_radio |awk -F '#' '{print $'$i'}' | awk -F ' ' '{print "put \"test\",\"" $1 "\",\"s:similar\",\"" $2 "\""}'` echo "$hbase_insert"|hbase shell done