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
Como alternativa, también puede usar este
sed
comando:fuente
Perl, la "motosierra del ejército suizo" del procesamiento de texto en línea de comandos, también puede hacer esto. La sintaxis es (no casualmente) bastante similar a la
tr
ysed
ejemplos:o:
Pero, sinceramente, si no desea tomarse el tiempo para aprender un nuevo lenguaje de programación (que es realmente lo que hacen awk, Perl y sed y otras herramientas como estas) solo para esta tarea básica, también podría hacerlo en cualquier editor de texto que admita búsqueda y reemplazo:
Abra el archivo CSV en su editor de texto favorito (como gedit, kate, mousepad, etc.; incluso el Bloc de notas o Wordpad simple en Windows puede hacer esto).
Seleccione "Buscar y reemplazar" en el menú (normalmente se encuentra en "Editar", si no hay un menú "Buscar" por separado).
Ingrese
_
en el cuadro de búsqueda y,
en el cuadro de reemplazo.Haga clic en "Reemplazar todo".
Repita con
"
en el cuadro de búsqueda y nada en el cuadro de reemplazo.Guarda el archivo.
Ahora, si necesita hacer esto para 100 o 1000 archivos en lugar de solo uno, entonces aprender una nueva herramienta de línea de comandos comienza a tener sentido. Y, por supuesto, una vez que sepa cómo usar Perl o sed o lo que sea, entonces ahorrará mucho tiempo y esfuerzo con tareas similares más adelante. Pero para un trabajo único que no espera volver a hacer, a veces una herramienta interactiva básica como un editor de texto es la solución más simple.
fuente
Podrías hacer esto
vim
también.Abra el archivo:,
vim input.csv
luego usevim
la herramienta de búsqueda avanzadas
. Escribe dos puntos (:
) para entrar en modo comando y ejecuta comandos como este:Prácticamente los mismos comandos que en la respuesta de IanC, pero dentro de en
vim
lugar de usarsed
.fuente
¿Por qué no simplemente cambiar los valores predeterminados de los valores del separador de entrada y salida?
fuente