2017-08-10 116 views
1

使用awk和sed獲取表的分區列表及其大小,我想用它來計算每個表的每日增量。這是我的輸出,現在我努力將所有的大小轉換爲MB。在bash中將kB和GB轉換爲MB

什麼是最好的bash的方式來匹配在第二場的數量和乘以取決於「MB」或「GB」串

2017061505,482.46MB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061505, 
2017061505,722.58MB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061506, 
2017061507,1.03GB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061507, 
2017061507,1.25GB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061508, 

所需的輸出將是:

2017061505,482.46MB,hdfs://MORPHEUS/user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061505, 
2017061506,722.58MB,hdfs://MORPHEUS/user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061506, 
2017061507,1030MB,hdfs://MORPHEUS/user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061507, 
2017061508,1250MB,hdfs://MORPHEUS/user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061508, 
+0

是否有其他方式來生成輸出? – user37421

+0

好吧,發佈預期的輸出 – RomanPerekhrest

+0

@ user37421它是Impala中「顯示分區」查詢的輸出,但是我可以更好地格式化它。我在想,最後我只是總結每個表的第二個字段,並得到結果 –

回答

1

AWK解決方案:

awk 'BEGIN{ FS=OFS="," }{ s=substr($2,1,length($2)-1); u=substr($2,length($2)-1); 
    if(u=="KB") $2=(s/1024)"MB"; else if(u=="GB") $2=(s*1024)"MB" }1' yourfile 

輸出:

2017061505,482.46MB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061505, 
2017061505,722.58MB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061506, 
2017061507,1054.72MB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061507, 
2017061507,1280MB,hdfs://user/hive/warehouse/cz_prd_ntw_op.db/diameter__24_/pr_comp_ver=0/pr_start_time=2017061508, 

注意,在信息學標稱單位價值

+0

謝謝,正是我在找的 –

+0

@k_mishap,不客氣 – RomanPerekhrest

1

在AWK簡單的解決方案:

awk '$2 ~ /[0-9\.]+GB/ { $2 = int($2 * 1024) "MB" } 1' FS="," OFS="," table.txt 

隨意添加其他規則kB轉換(只需除以1024)。