awk算术运算一例:统计hdfs上某段时间内的文件大小

简介:

计算hdfs指定目录中所有文件名中包含2011-04-24的文件大小,并换算成GB:

 
  1. $HADOOP_HOME/bin/hadoop fs -du /user/hdfs/s3/ifocus/*2011-04-24*  |awk '{sum += $1}END{print sum}'  |awk '{total=$1;base=1024*1024*1024;print total/base}' 
   如果要统计20号到24号所有文件大小的总和呢?
 
  1. #!/bin/bash 
  2. DIR=/log/tmp/cd 
  3.  
  4. startdate="$1"
  5. date1=$(date -d "$1" "+%s")
  6. date2=$(date -d "$2" "+%s")
  7. date_count=$(echo "$date2 - $date1"|bc)
  8. day_m=$(echo "$date_count"/86400|bc)
  9.  
  10. for ((sdate=0;sdate<"$day_m";sdate++))
  11. do
  12. DAY=$(date -d "$startdate $sdate days" "+%F")
  13.    Size=$(~/hadoop-0.20.2-CDH3B4/bin/hadoop fs -du ${DIR}/*${DAY}* |awk '{sum += $1}END{printf "%u",sum}') 
  14.    let a=${a}+${Size} 
  15. done 
  16.  
  17. echo $a |awk '{total=$1;base=1024*1024*1024;print total/base}' 
   脚本比较简单,但由于shell不支持浮点数运算,搞了很久,才想起使用printf "%u"来指定用十进制表示文件大小,这才顺利完成脚本。计算的时候,指定起始日期,20110420,20110424。
  另外一个问题:最后那条shell语句是如何取得for循环中的变量$a的?Shell脚本里,要使用local关键字来标识局部变量;否则,变量默认为全局的,一直到脚本结束,当然前提是没有被后面的值覆盖。
  所以,在循环体外面引用循环体里面的变量是完全可以的。

本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/554922
相关文章
|
5月前
|
Unix Java Linux
Linux脚本中的字符处理与awk编程|WC统计
Linux脚本中的字符处理与awk编程|WC统计
55 0
|
6月前
|
存储 分布式计算 Hadoop
HDFS 修改副本数&fsck命令
HDFS 修改副本数&fsck命令
262 0
|
29天前
|
监控 Linux
|
6月前
|
分布式计算 Hadoop Java
Hadoop学习笔记:运行wordcount对文件字符串进行统计案例
Hadoop学习笔记:运行wordcount对文件字符串进行统计案例
34 0
|
10月前
|
Linux PHP Perl
巧用 awk 批量杀进程
我需要批量杀死某台机器的 PHP 进程,该怎么办?如果是一个进程,那就好办了,ps -ef | grep php,找到 PID 然后 kill -9 PID……那批量怎么搞呢?
55 0
|
11月前
|
分布式计算 Hadoop 大数据
【大数据学习篇3】HDFS命令操作与MR单词统计
【大数据学习篇3】HDFS命令操作与MR单词统计
118 0
|
12月前
|
Linux
Linux 常用命令-统计文件行数、单次数、字节数、字符数
Linux、统计文件行数、单次数、字节数、字符数
142 0
|
分布式计算 Ubuntu Java
运行Hadoop自带的单词统计程序
运行Hadoop自带的单词统计程序
108 0
运行Hadoop自带的单词统计程序
|
运维 Java Shell
记一次df -Th与du -sh空间大小不一致磁盘爆满问题的处理过程
记一次df -Th与du -sh空间大小不一致磁盘爆满问题的处理过程
310 0
记一次df -Th与du -sh空间大小不一致磁盘爆满问题的处理过程
|
SQL 算法 HIVE
Hive计算最大连续登陆天数
怎样用Hive计算最大连续登陆天数。
517 0