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

 

posted on 2013-03-21 16:53  JueFan_C  阅读(361)  评论(0编辑  收藏  举报

导航