awk - 如何使用 awk 从列表中获取特定列

我在 netezza 中有一个表的这些统计信息

/nz/support-IBM_Netezza-11.2.1.1-210825-0050/bin/nz_genstats OID_DB.OID_DB.OID_PAGOS_APLICADOS_FIJO

/nz/support-IBM_Netezza-11.2.1.1-210825-0050/bin/nz_get OID_DB.OID_DB.OID_PAGOS_APLICADOS_FIJO

   Table: OID_PAGOS_APLICADOS_FIJO  (276666)
Rowcount: 9,602,310
Dist Key: IDFAC

attnum Column Name              Statistics Status   Minimum Value   Maximum Value    # of Unique Values       # of NULLs      MaxLen AvgLen
------ ------------------------ ==================  =============== =============== ==================== ==================== ====== ======
    1  FECHA_PROCESO            Express             2020-01-01      2022-08-01                       940
    2  DOCUMENTO                Express             0011895954      9998147                    2,235,478                          12     10
    3  USUARIO                  Express             AAGARCIA        ZRAMIREC                       1,509                          20     14
    4  NOMBRE_USUARIO           Express             ABEL DAVID SARI ZOILA ROSA RAMI                1,525                          71     23
    5  FECHA_PAGO               Express             2009-06-19 10:2 2022-08-01 20:2              308,032
    6  FECHA_PAGO_CONTABLE      Express             2009-06-19 10:2 2022-08-01 20:2              305,643
    7  TIPO_DOC                 Express             AJC             VKA                               50                           5      5
    8  DESCRIPCION_TIPO_DOC     Express             AJUSTE          TRANSFERENCIA                     48               92,138     34     18
    9  CODIGO_BANCO             Express             003             999                               10            1,815,649      5      5
   10  NOMBRE_BANCO             Express             BOLIVARIANO BAN TELMEX RRHH                        9            1,817,818     23     19
   11  CTA_CORRIENTE            Express             0005046294      7621019                           18            1,815,649     52     52
   12  CODIGO_CLIENTE           Express             00000005        20523352                     516,577                          10     10
   13  IDENTIFICACION           Express              077083801      h234573                      516,384                          17     12
   14  TIPO_IDENTIDICACION      Express             CEDULA DE IDENT RUC                                3                          21     20
   15  NOMBRE_CLIENTE           Express              BEIERSDORF S.A �USTA SELENA QU              518,080                         112     31
   16  SEGMENTO_MERCADO         Express             CARRIER         RESIDENCIAL                        9                    4     24     13
   17  GESTOR                   Express             ANGEL GUILLERMO RRAMIREG                           6            9,539,531     32     19
   18  REF_LOTE                 Express             6926            78937                             41            9,539,282
   19  VALOR_RECIBIDO           Express             0.0100          3237920.0000                  43,192
   20  ESTADO_RECIBO_NC         Express             A               PAGADO TOTALMEN                    4                          21      4
   21  SALDO                    Express             -123.38         35197.12                       5,795
   22  IDFAC                    Express             0000000094      0067735776                 8,687,120                  648     12     12
   23  TIPO_DOC_AFEC            Express             AJD             NDI                               13                  648      5      5
   24  FACTURA                  Express             000-000-0000001 999-999-0067722            2,260,744                  651     20     18
   25  FECHA_EMISION_FACTURA    Express             2004-09-08 00:0 2023-03-15 00:0                4,196                  648
   26  MES_FACTURA              Express             200409          202303                           220                  648      8      8
   27  ID_CICLO                 Express             1               429                               22            5,803,887
   28  CICLO_DOC                Express             CICLO 2 MENSUAL CICLO VARIOS QU                   22            5,803,887     31     17
   29  VALOR_APLICADO           Express             0.0020          381157.3100                   37,738                    2
   30  FECHA_APLICACION         Express             2020-01-01 00:0 2022-08-01 23:4              787,990                    2
   31  FORMAPAGO                Express             CHEQUE          TRANSFERENCIAS                     7            5,784,974     26     15
   32  ESTADO_DOCUMENTO         Express             EMITIDO         PAGADO TOTALMEN                    3               93,703     21     19
   33  FECHA_VENCIMIENTO        Express             2004-09-23 00:0 2025-07-26 12:2              315,756                  648
   34  MES_VENCIMIENTO          Express             200409          202507                           251                  648      8      8
   35  PARROQUIA                Express             12 DE MARZO     ZONA NAVAL                     1,010            1,603,596     41     14
   36  CANTON                   Express             24 DE MAYO      ZAMORA                           103            1,603,596     29      9
   37  CODIGO_SUCURSAL          Express             0000000003      0018313083                   560,976               22,723     12     12
   38  ID_CANAL                 Express             ASP             VENT                               5            4,750,391      6      6
   39  DESC_CANAL               Express             Autoservicio    Ventanilla                         5            4,750,391     26     16

如何获取列的 attnum、列名和唯一值的数量

我有这个 Shell 脚本

table="OID_DB.OID_DB.OID_PAGOS_APLICADOS_FIJO"
gen_stats=$(/nz/support-IBM_Netezza-11.2.1.1-210825-0050/bin/nz_genstats $table)
get_stats=$(/nz/support-IBM_Netezza-11.2.1.1-210825-0050/bin/nz_get $table)

echo "$get_stats" | awk '/FECHA_PROCESO/, /DESC_CANAL/' | awk '{ print $1"|"$2"|"$6 }'

但是得到的结果是

1|FECHA_PROCESO|940
2|DOCUMENTO|2,235,478
3|USUARIO|1,509
4|NOMBRE_USUARIO|SARI
5|FECHA_PAGO|2022-08-01
6|FECHA_PAGO_CONTABLE|2022-08-01
7|TIPO_DOC|50
8|DESCRIPCION_TIPO_DOC|48
9|CODIGO_BANCO|10
10|NOMBRE_BANCO|TELMEX
11|CTA_CORRIENTE|18
12|CODIGO_CLIENTE|516,577
13|IDENTIFICACION|516,384
14|TIPO_IDENTIDICACION|IDENT
15|NOMBRE_CLIENTE|�USTA
16|SEGMENTO_MERCADO|9
17|GESTOR|RRAMIREG
18|REF_LOTE|41
19|VALOR_RECIBIDO|43,192
20|ESTADO_RECIBO_NC|TOTALMEN
21|SALDO|5,795
22|IDFAC|8,687,120
23|TIPO_DOC_AFEC|13
24|FACTURA|2,260,744
25|FECHA_EMISION_FACTURA|2023-03-15
26|MES_FACTURA|220
27|ID_CICLO|22
28|CICLO_DOC|MENSUAL
29|VALOR_APLICADO|37,738
30|FECHA_APLICACION|2022-08-01
31|FORMAPAGO|7
32|ESTADO_DOCUMENTO|TOTALMEN
33|FECHA_VENCIMIENTO|2025-07-26
34|MES_VENCIMIENTO|251
35|PARROQUIA|MARZO
36|CANTON|MAYO
37|CODIGO_SUCURSAL|560,976
38|ID_CANAL|5
39|DESC_CANAL|5

我怎样才能得到#of Unique Values列的值

最佳答案

对 FIELDWIDTHS 使用 GNU awk:

$ cat tst.awk
BEGIN { OFS="|" }
/^[-= ]+$/ {
    inVals = 1
    for ( i=1; i<=NF; i++ ) {
        wids = wids " " (length($i) + 1)
    }
    FIELDWIDTHS = wids
    $0 = prev
    for ( i=1; i<=NF; i++ ) {
        gsub(/^\s+|\s+$/,"",$i)
        f[$i] = i
    }
}
{ prev = $0}
inVals {
    for ( i=1; i<=NF; i++ ) {
        gsub(/^\s+|\s+$/,"",$i)
    }
    print $(f["attnum"]), $(f["Column Name"]), $(f["# of Unique Values"])
}

$ awk -f tst.awk file
attnum|Column Name|# of Unique Values
1|FECHA_PROCESO|940
2|DOCUMENTO|2,235,478
3|USUARIO|1,509
4|NOMBRE_USUARIO|1,525
5|FECHA_PAGO|308,032
6|FECHA_PAGO_CONTABLE|305,643
7|TIPO_DOC|50
8|DESCRIPCION_TIPO_DOC|48
9|CODIGO_BANCO|10
10|NOMBRE_BANCO|9
11|CTA_CORRIENTE|18
12|CODIGO_CLIENTE|516,577
13|IDENTIFICACION|516,384
14|TIPO_IDENTIDICACION|3
15|NOMBRE_CLIENTE|518,080
16|SEGMENTO_MERCADO|9
17|GESTOR|6
18|REF_LOTE|41
19|VALOR_RECIBIDO|43,192
20|ESTADO_RECIBO_NC|4
21|SALDO|5,795
22|IDFAC|8,687,120
23|TIPO_DOC_AFEC|13
24|FACTURA|2,260,744
25|FECHA_EMISION_FACTURA|4,196
26|MES_FACTURA|220
27|ID_CICLO|22
28|CICLO_DOC|22
29|VALOR_APLICADO|37,738
30|FECHA_APLICACION|787,990
31|FORMAPAGO|7
32|ESTADO_DOCUMENTO|3
33|FECHA_VENCIMIENTO|315,756
34|MES_VENCIMIENTO|251
35|PARROQUIA|1,010
36|CANTON|103
37|CODIGO_SUCURSAL|560,976
38|ID_CANAL|5
39|DESC_CANAL|5

https://stackoverflow.com/questions/73213565/

相关文章:

r - 如何在 R 中生成向量的所有可能的连续 n 元组?

r - 如何在R中自动使函数的结果成为同一函数的参数

caching - Aerospike 为特定字段设置到期日期

python - 计算 pandas 数据框行中 Python 列表中元素的出现次数

python - 如果数字在 Pandas 的指定范围内,如何返回值

c# - 自定义授权过滤最小 API .Net 6

r - 选择仅连续运行特定值的组

kotlin - 如何将 `throw` 放入辅助函数中但仍然具有空安全性?

c++ - 创建其他对象时如何使用同一个对象实例?

python - 如何处理在 FastAPI 中混淆的路径操作?