Home > OS >  How to get a specific column from a list with awk
How to get a specific column from a list with awk

Time:08-03

I have these statistics of a table in 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

how can i get the columns attnum, column name and # of unique values

I have this Shell Script

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 }'

but the result obtained is

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

How can I get the values of the # of Unique Values column

CodePudding user response:

Using GNU awk for 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"])
}

$ 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

CodePudding user response:

took me long enough :

mawk '
/^[ =-] ==[ =-] $/ {
      __=sprintf("%c",_ =___=(_ =_^=FS)*_)
    ___ =___
    do { 
         sub("^",__,$_) } while(  _<___)

       _=match($!_, __ (". ")__)
    ____=NR;___ = 3;__ = RLENGTH
 }  ____<NR { 
      $(___) = substr($!NF,_,__)
    gsub("[^0-9] ","",$(NF =___)); print }' OFS='\f\r\t' ____=999
1
    FECHA_PROCESO
    940
2
    DOCUMENTO
    2235478
3
    USUARIO
    1509
4
    NOMBRE_USUARIO
    1525
5
    FECHA_PAGO
    308032
6
    FECHA_PAGO_CONTABLE
    305643
7
    TIPO_DOC
    50
8
    DESCRIPCION_TIPO_DOC
    48
9
    CODIGO_BANCO
    101
10
    NOMBRE_BANCO
    91
11
    CTA_CORRIENTE
    181
12
    CODIGO_CLIENTE
    516577
13
    IDENTIFICACION
    516384
14
    TIPO_IDENTIDICACION
    3
15
    NOMBRE_CLIENTE
    518080
16
    SEGMENTO_MERCADO
    9
17
    GESTOR
    69
18
    REF_LOTE
    419
19
    VALOR_RECIBIDO
    43192
20
    ESTADO_RECIBO_NC
    4
21
    SALDO
    5795
22
    IDFAC
    8687120
23
    TIPO_DOC_AFEC
    13
24
    FACTURA
    2260744
25
    FECHA_EMISION_FACTURA
    4196
26
    MES_FACTURA
    220
27
    ID_CICLO
    225
28
    CICLO_DOC
    225
29
    VALOR_APLICADO
    37738
30
    FECHA_APLICACION
    787990
31
    FORMAPAGO
    75
32
    ESTADO_DOCUMENTO
    3
33
    FECHA_VENCIMIENTO
    315756
34
    MES_VENCIMIENTO
    251
35
    PARROQUIA
    10101
36
    CANTON
    1031
37
    CODIGO_SUCURSAL
    560976
38
    ID_CANAL
    54
39
    DESC_CANAL
    54

CodePudding user response:

My 2 cts

gawk 'BEGIN{OFS="|"}
    { if($0 ~ /\--|==/) { 
        print $0
        for ( i=1; i<=NF; i   ) { 
        if(i == 1){
            fl[i]=length($i)   1
        } else {
            fl[i]= fl[i - 1]   length($i)   1 
            
        }
        
        # fix double space at field 3
        fl[3]=fl[3]   1
        }
    }
    if(NR >6){
        print substr($0,1,fl[1]), substr($0,fl[1],fl[2] - fl[1]), substr($0,fl[5],fl[6] - fl[5])
    }
}' test.txt  | tr -d ' '

Result

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
....
  • Related