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

Jen*_*tro 2 awk

我有 netezza 表的这些统计数据

\n

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

\n

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

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

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

\n

我有这个 Shell 脚本

\n
table="OID_DB.OID_DB.OID_PAGOS_APLICADOS_FIJO"\ngen_stats=$(/nz/support-IBM_Netezza-11.2.1.1-210825-0050/bin/nz_genstats $table)\nget_stats=$(/nz/support-IBM_Netezza-11.2.1.1-210825-0050/bin/nz_get $table)\n\necho "$get_stats" | awk '/FECHA_PROCESO/, /DESC_CANAL/' | awk '{ print $1"|"$2"|"$6 }'\n\n
Run Code Online (Sandbox Code Playgroud)\n

但得到的结果是

\n
1|FECHA_PROCESO|940\n2|DOCUMENTO|2,235,478\n3|USUARIO|1,509\n4|NOMBRE_USUARIO|SARI\n5|FECHA_PAGO|2022-08-01\n6|FECHA_PAGO_CONTABLE|2022-08-01\n7|TIPO_DOC|50\n8|DESCRIPCION_TIPO_DOC|48\n9|CODIGO_BANCO|10\n10|NOMBRE_BANCO|TELMEX\n11|CTA_CORRIENTE|18\n12|CODIGO_CLIENTE|516,577\n13|IDENTIFICACION|516,384\n14|TIPO_IDENTIDICACION|IDENT\n15|NOMBRE_CLIENTE|\xef\xbf\xbdUSTA\n16|SEGMENTO_MERCADO|9\n17|GESTOR|RRAMIREG\n18|REF_LOTE|41\n19|VALOR_RECIBIDO|43,192\n20|ESTADO_RECIBO_NC|TOTALMEN\n21|SALDO|5,795\n22|IDFAC|8,687,120\n23|TIPO_DOC_AFEC|13\n24|FACTURA|2,260,744\n25|FECHA_EMISION_FACTURA|2023-03-15\n26|MES_FACTURA|220\n27|ID_CICLO|22\n28|CICLO_DOC|MENSUAL\n29|VALOR_APLICADO|37,738\n30|FECHA_APLICACION|2022-08-01\n31|FORMAPAGO|7\n32|ESTADO_DOCUMENTO|TOTALMEN\n33|FECHA_VENCIMIENTO|2025-07-26\n34|MES_VENCIMIENTO|251\n35|PARROQUIA|MARZO\n36|CANTON|MAYO\n37|CODIGO_SUCURSAL|560,976\n38|ID_CANAL|5\n39|DESC_CANAL|5\n\n
Run Code Online (Sandbox Code Playgroud)\n

如何获取“唯一值#”列的值

\n

Ed *_*ton 5

使用 GNU awk 表示 FIELDWIDTHS:

$ 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"])
}
Run Code Online (Sandbox Code Playgroud)

$ 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
Run Code Online (Sandbox Code Playgroud)