Eliminar la coma de las columnas en un file si está al final

Tengo un file separado por tabulaciones que contiene 19 columnas, algunas de estas columnas contienen una coma al final. Quiero eliminar estas comas de todas las columnas si están al final. Ejemplo:

c1 c2 c3 c4 c5 re, f,fd,f, gf mk df df, df dl, df, 

El resultado debe ser guardado en el mismo file

 c1 c2 c3 c4 c5 re f,fd,f gf mk df df df dl df 

Puedes hacerlo:

 perl -i -pe 's/,(\t|$)/$1/g' file 

Eso eliminará cualquier comas seguida de un espacio, una pestaña o una nueva línea.

Para otros delimitadores de campo, por ejemplo : use:

 perl -i -F: -lane 's/,$// for @F; print join ":",@F' file 

Estos commands cambiarán el file original , eliminarán el -i para probarlo primero.

Para eliminar una coma individual al final de cada campo:

 perl -i -pe 's/,(\t|$)/$1/g' myfile 

(\t|$) coincide con una pestaña o al final de la línea. s/…/…/g reemplaza cada aparición del patrón (aquí ,(\t|$) ) por el text de reemploop dado (aquí, $1 , que significa la parte del patrón que está entre paréntesis). Los campos que no terminan con una coma no coinciden con el patrón, por lo que se imprimen sin modificaciones.

La opción -p indica a Perl que aplique la expresión dada a cada línea de input e imprima la línea modificada. La opción -i hace que el file de input sea reemplazado por el resultado resultante.

Aquí hay algunas cosas increíbles de lookaround …

 perl -i -pe 's/,(?=\t|$)//g' file 

o

 perl -i -pe 's/,(?!\S)//g' file 

o

Usar límites sin palabras …

 perl -i -pe 's/,\B//g' file