Una forma mucho más simple es usar tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
La forma en que esto funciona es que tr
requiere dos argumentos: un conjunto de caracteres para ser reemplazados y su reemplazo. En este caso solo tenemos conjuntos de 1 carácter. Redirigimos input.csv
de entrada tr
's flujo de entrada estándar a través de <
operador de concha, y canalizar la salida resultante para tr -d '"'
eliminar las comillas dobles.
Pero también awk
puede hacerlo.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
La forma en que esto funciona es ligeramente diferente: awk lee cada archivo línea por línea, siendo cada secuencia de comandos en línea /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Aquí no tenemos un patrón, por lo que significa ejecutar codeblock para cada línea. gsub()
La función se usa para la sustitución global dentro de una línea, por lo tanto, la usamos para reemplazar guiones bajos por comas y comillas dobles con una cadena nula (eliminando efectivamente el carácter). El 1
está en lugar de la coincidencia de patrón con el bloque de código que falta, que por defecto simplemente imprime la línea; en otras palabras, el bloque de código gsub()
hace el trabajo e 1
imprime el resultado.
Use la redirección de shell ( >
) para enviar la salida a un nuevo archivo:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv