【问题标题】:Filter out different fields for each line with AWK使用 AWK 过滤掉每一行的不同字段
【发布时间】:2017-07-01 05:35:33
【问题描述】:

我有这些命令来显示分区中的文件数。

echo '' > ~/partitions_mkt_296 ; impala-shell -i czmorehr -q "use cz_prd_mkt_op; show tables;" -B | while read a; do impala-shell -q "show partitions cz_prd_mkt_op.${a};" -B -i czmorehr >> ~/partitions_mkt_296.txt; done

问题在于,在生成的文件中 - 我要查找的数字有时位于第 3、第 4 或第 7 个字段中(取决于表的分区数。
我想使用 awk 提取所有可能的列,然后在它们包含“=”、“。”的前提下过滤掉那些我不想要的列。或者 ”-”。 - 并且只显示不包含这些的字段。
这有可能实现吗?

样本输入为:

2017052118  -1  7   197.70MB    NOT CACHED  NOT CACHED  PARQUET false   hdfs://MORPHEUS/user/hive/warehouse/cz_prd_mkt_op.db/edw_customers/pr_load_time=2017052118
2017052209  -1  8   198.31MB    NOT CACHED  NOT CACHED  PARQUET false   hdfs://MORPHEUS/user/hive/warehouse/cz_prd_mkt_op.db/edw_customers/pr_load_time=2017052209
0   2017062006  -1  4   232.42MB    NOT CACHED  NOT CACHED  PARQUET false   hdfs://MORPHEUS/user/hive/warehouse/cz_prd_ntw_op.db/gngi__24_/pr_comp_ver=0/pr_start_time=2017062006
0   2017062007  -1  5   347.36MB    NOT CACHED  NOT CACHED  PARQUET false   hdfs://MORPHEUS/user/hive/warehouse/cz_prd_ntw_op.db/gngi__24_/pr_comp_ver=0/

在前两行中,我想提取数字 7,8 以及表名 -edw_customers。在最后两行中,我需要提取数字 4,5 和表名-gngi__24_

【问题讨论】:

  • 发布示例输入
  • 为什么2017052118应该被忽略?
  • @RomanPerekhrest 它不应该 - 从这一行中,我想在第三个字段中提取 "7" ,然后是 "edw_customers" 。问题是第三和第四行有我对不同领域感兴趣的数字(第 4 行)

标签: sql bash hadoop awk impala


【解决方案1】:

GNU awk 解决方案:

awk '$11~/^hdfs/{ match($11,/_op\.db\/([^\/]+)/,a); num=$3; tn=a[1] }
     $12~/^hdfs/{ match($12,/_op\.db\/([^\/]+)/,a); num=$4; tn=a[1] }{ print num,tn }' file

输出:

7 edw_customers
8 edw_customers
4 gngi__24_
5 gngi__24_

【讨论】:

    【解决方案2】:

    使用任何 awk:

    $ awk '{gsub(/.*_op\.db\/|\/.*/,"",$NF); print $(NF-8), $NF}' file
    7 edw_customers
    8 edw_customers
    4 gngi__24_
    5 gngi__24_
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-09
      • 2017-02-06
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2022-12-21
      相关资源
      最近更新 更多