【发布时间】:2021-02-18 04:42:18
【问题描述】:
我有一个如下文件:
9 0 topic1 hour=11
9 0 topic1 hour=12
9 0 topic1 hour=13
9 0 topic1 hour=14
9 0 topic1 hour=15
9 0 topic1 hour=16
9 0 topic1 hour=17
9 0 topic1 hour=18
9 0 topic1 hour=19
9 0 topic1 hour=20
9 0 topic1 hour=21
9 0 topic1 hour=22
9 0 topic1 hour=23
9 0 topic2 hour=00
9 0 topic2 hour=01
9 0 topic2 hour=02
9 0 topic2 hour=03
9 0 topic2 hour=04
9 0 topic2 hour=05
- 第一列是最后一列的小时目录中的文件数
- 第二列是以 GB 为单位的大小
- 第三列是父 hdfs 目录
- 最后一列是父目录中的每小时目录
我希望输出格式如下
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
topic1 00 00 00 00 00 00 00 00 00 00 09 09 09 09 09 09 09 09 09 09 09 09 09 09
topic2 09 09 09 09 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
这是每个父目录按小时计算的文件数,采用表格格式。如果可以在那里显示大小,比如用逗号分隔,那就太好了。
到目前为止,这是我设法创建的:
/bin/hdfs dfs -count <hdfs_path>/year=`date --date="1 days ago" +%Y`/month=`date --date="1 days ago" +%m`/day=`date --date="1 days ago" +%d`/*|awk '{print $2, int($3/(1024*1024*1024)+0.5), $4}'|cut -d '/' -f1,5,9|sed 's/\// /g'| awk -v OFS='\t' '{print $1, $2, $3,"",$4}'|while read i
do
for topic in topic1 topic2 topic3
do
num_files=`echo $i|grep $topic|awk '{print $1}'`
size_gb=`echo $i|grep $topic|awk '{print $2}'`
hour=`echo $i|grep $topic|awk '{print $4}'|cut -d "=" -f2`
done
done
我正在尝试解析每一行,然后格式化一个新行。考虑检查那里是否有其他聪明的方法。
我在 Linux 上,所以可以使用 Bash 或 Python。到目前为止,我设法创建的其余脚本是 Bash。
【问题讨论】: