Estoy teniendo archivo de texto dicen 01-01-2013.txt y tiene el contenido de la siguiente

cat 01-01-2013.txt | cut -d',' -f1-10 | head -6
TIMESTAMP,DATE,HOUR_MINUTE,CAWFM,CSQ2,DBCRIS.CA.MSG,DBI.MSBR.INCOMING.Q,DBI.MSBR.INCOMING.Q.ERROR,DBT.CA.RECEIVE.CUST,DBT.CA.RECEIVE.CUST.ERROR 
20130101000019,01.01.2013,00:00,0,0,0,0,0,6893,31 
20130101000133,01.01.2013,00:01,0,0,0,0,0,6858,31 
20130101000246,01.01.2013,00:02,0,0,0,0,0,6661,31 
20130101000359,01.01.2013,00:03,0,0,0,0,0,6314,31 
20130101000512,01.01.2013,00:05,0,0,0,0,0,6074,31 

Cuando traté de encontrar el número de columnas que he utilizado siguiente comando y i m a no conseguir el resultado esperado de la siguiente manera. acaba de regresar a su 1

awk 'BEGIN {IFS=","};END{print NF}' 01-01-2013.txt

Resultado

1

Por favor me ayude a averiguar el número total de columnas.

  • es este un CSV que desea saber sobre columnas? Si no, ¿cómo definir lo que una columna es? También, ¿qué respuesta quieres si filas diferentes tienen diferentes columna cuenta?

3 Comentarios

  1. 2

    Su ejemplo no funciona porque awk no utilizar el nombre IFS, el campo de entrada del separador se llama FS (pero se hace uso de OFS para la salida del separador de campo).

    $ awk 'BEGIN{FS=","}END{print NF}' csv
    10

    Pero se puede ir sin leer todo el archivo, por ejemplo, por solo leer la primera línea

    $ awk -F, 'NR==1{print NF;exit}' csv
    10

    o la primera línea que coincide con /,/

    $ awk -F, '/,/{print NF;exit}' csv
    10

    Si sólo desea quitar las dos primeras columnas, no entiendo por qué no se meten con cut como en su pregunta:

    $ cut -d, -f3- csv
    HOUR_MINUTE,CAWFM,CSQ2,DBCRIS.CA.MSG,DBI.MSBR.INCOMING.Q,DBI.MSBR.INCOMING.Q.ERROR,DBT.CA.RECEIVE.CUST,DBT.CA.RECEIVE.CUST.ERROR
    00:00,0,0,0,0,0,6893,31
    00:01,0,0,0,0,0,6858,31
    00:02,0,0,0,0,0,6661,31
    00:03,0,0,0,0,0,6314,31
    00:05,0,0,0,0,0,6074,31
    • Hola Adrian , Incluso he tratado de FS no su trabajo
    • Trató de mis ejemplos? Pero como se dijo, si desea quitar columnas, no uso awk pero el uso de cut lugar.
    • Adrian , en Realidad yo m la implementación de una cierta lógica en mi script es decir, después de la eliminación de 2 columnas necesito saber la suma de las otras columnas y la necesidad de eliminar las columnas que tiene un total de 0 en la última necesario agregar el total de las respectivas columnas
    • ok seguro que yo lo probaré y let u know 🙂
    • no sólo el amor a preguntas como: «yo quiero hacer X» y cuando les dices cómo hacer X que decir «en realidad, lo que quiero hacer Y». Me pregunto qué pasa por sus mentes….
    • En realidad, es peor. Ver el anterior comentario de Steven respuesta. Es más como «quiero hacer X…no, espera, quiero hacer Y. me refiero a la Z …».
    • ¿Por qué el downvote?

  2. 0
    $ awk '{print NF}' FS=, 01-01-2013.txt
    10
    10
    10
    10
    10
    10
    • Hola Steven, en realidad tengo que quitar 2 primeras columnas y copia para archivo nuevo
  3. 0

    Para encontrar el número total de columnas :

    Input_file

    TIMESTAMP,DATE,HOUR_MINUTE,CAWFM,CSQ2,DBCRIS.CA.MSG,DBI.MSBR.INCOMING.Q,DBI.MSBR.INCOMING.Q.ERROR,DBT.CA.RECEIVE.CUST,DBT.CA.RECEIVE.CUST.ERROR
    20130101000019,01.01.2013,00:00,0,0,0,0,0,6893,31
    20130101000133,01.01.2013,00:01,0,0,0,0,0,6858,31
    20130101000246,01.01.2013,00:02,0,0,0,0,0,6661,31
    20130101000359,01.01.2013,00:03,0,0,0,0,0,6314,31
    20130101000512,01.01.2013,00:05,0,0,0,0,0,6074,31

    Awk Código

    awk 'BEGIN {FS=","} ; END{print NF}' Input_file

    Salida

    10

    Perl Solución

    #! /usr/bin/perl
    
    use strict;
    use warnings;
    
    my @cols = split(',', $_);
    my $n = @cols;
    print "row $. =  $n columns\n";

    Guardar el código como code.pl y ejecutar como

    $> perl -n code.pl Input_file

    Perl De Salida

    row 1 =  10 columns
    row 2 =  10 columns
    row 3 =  10 columns
    row 4 =  10 columns
    row 5 =  10 columns
    row 6 =  10 columns

Dejar respuesta

Please enter your comment!
Please enter your name here