Me gustaría quitar la coma , al final de cada línea en el archivo. Cómo puedo hacerlo de otra que utilizar la función substring en awk. por favor, me sugieren.Gracias

De Entrada De Ejemplo

        SUPPLIER_PROC_ID BIGINT NOT NULL,
        BTCH_NBR INTEGER NOT NULL,
        RX_BTCH_SUPPLIER_SEQ_NBR INTEGER NOT NULL,
        CORRN_ID INTEGER NOT NULL,
        RX_CNT BYTEINT NOT NULL,
        DATA_TYP_CD BYTEINT NOT NULL,
        DATA_PD_CD BYTEINT NOT NULL,
        CYC_DT DATE NOT NULL,
        BASE_DT DATE NOT NULL,
        DATA_LOAD_DT DATE NOT NULL,
        DATA_DT DATE NOT NULL,
        SUPPLIER_DATA_SRC_CD BYTEINT NOT NULL,
        RX_CHNL_CD BYTEINT NOT NULL,
        MP_IMS_ID INTEGER NOT NULL,
        MP_LOC_ID NUMERIC(3,0),
        MP_IMS_ID_ACTN_CD BYTEINT NOT NULL,
        NPI_ID BIGINT,
InformationsquelleAutor Teja | 2013-02-12

5 Comentarios

  1. 50

    Puede utilizar sed:

    sed 's/,$//' file > file.nocomma

    y eliminar todo lo último carácter:

    sed 's/.$//' file > file.nolast
    • En lugar de enviar la salida a un newfile también puede agregar el parámetro-i a sed para escribir i a ‘archivo’
    • De hecho, pero el uso de esta opción puede activar una sed error en su lugar. La pregunta es etiquetado de Unix. El uso de un no POSIX GNUism haría que mi sugerencia no portátil.
  2. 76

    Trata de hacer esto :

    awk '{print substr($0, 1, length($0)-1)}' file.txt

    Esto es más genérico que sólo la eliminación de la final de la coma, pero de último carácter

    Si quieres quitar sólo la última coma con awk :

    awk '{gsub(/,$/,""); print}' file.txt
    • Yo sólo estaba tratando de hacer algo como esto, y por alguna razón usted necesita un length($0) sin la -1… no parece tener mucho sentido para mí. Pero cualquiera que sea, es bash, siempre y cuando las obras.
  3. 6

    Un awk código basado en RS.

    awk '1' RS=',\n' file

    o:

    awk 'BEGIN{RS=",\n"}1' file

    Este último ejemplo, será válido para cualquier char antes de newline:

    awk '1' RS='.\n' file

    Nota: punto . coincide con cualquier carácter excepto saltos de línea.

    Explicación

    awk nos permite el uso de diferentes registro (línea) regex separadores, sólo tenemos que incluir la coma antes de la salto de línea (o dot para cualquier char) en el que se utiliza para la input, el RS.

    Nota: lo que 1 significa?

    Respuesta corta, Es sólo un atajo para evitar el uso de la print declaración.
    En awk cuando una condición se presenta igualado la acción predeterminada es imprimir la línea de entrada, por ejemplo:

    $ echo "test" |awk '1'
    test

    Que es porque 1 será siempre verdadero, por lo que esta expresión es equivalente a:

    $ echo "test"|awk '1==1'
    test
    $ echo "test"|awk '{if (1==1){print}}'
    test

    Documentación

    De verificación Registro de la División con el Estándar de awk y La Salida De Los Separadores De.

    • Upvoting esto porque yo era capaz de canalizar la salida de ls en la segunda declaración y tira de una determinada extensión de archivo. Algunas de las otras respuestas podría haber trabajado para ello, pero esto era más fácil para mí para leer, mientras que todavía se mantiene muy corto.
  4. 1

    comandos alternativos que hace el mismo trabajo

    tr -d ",$" < infile
    awk 'gsub(",$","")' infile
    • Su tr sugerencia es incorrecta. Le van a quitar todas las comas donde sea que estén, no sólo de la última. Su awk basada uno está bien, aunque sub en lugar de gsub sería suficiente. No puede haber más de un fin de línea por línea.
    • El tr sugerencia también eliminar $ caracteres que pueden aparecer en el archivo de proceso.
  5. 0

    Este código en Perl quita comas al final de la línea:

    perl -pe 's/,$//' file > file.nocomma

    Esta variación todavía funciona si hay un espacio en blanco después de la coma:

    perl -lpe 's/,\s*$//' file > file.nocomma

    Esta variación se edita el archivo en el lugar:

    perl -i -lpe 's/,\s*$//' file

    Esta variación se edita el archivo en el lugar, y hace una copia de seguridad file.bak:

    perl -i.bak -lpe 's/,\s*$//' file

Dejar respuesta

Please enter your comment!
Please enter your name here