GNU/Linux >> Tutoriales Linux >  >> Linux

¿Agregar comillas dobles alrededor de los campos en la salida del script AWK?

Si quieres:

agregue esto a la secuencia de comandos existente.

Puede insertar \"\" adicional en cada argumento de print así:

print "\"admin\"", "\"base\"", ...

Editado:

Sí, tal vez configurar OFS sea una mejor solución:

BEGIN { OFS="\";\""; } ... print "\"admin", ...., "simple\"";


awk '{for (i=1;i<=NF;i++) $i="\""$i"\""}1' FS=";" OFS=";" input

Para agregar comillas alrededor de las entradas, puede usar un bucle AWK simple:

Guión:simple_loop.awk

BEGIN {FS=";"}
{
  for(i=1;i<NF;i++){
       printf("\"%s\";", $i); 
  }
  printf("\"%s\"\n",$NF);
}

Por ejemplo

echo "admin;base;5.11 HOLSTER SHIRT L WHITE;;" | awk -f simple_loop.awk

Debería salir

"admin";"base";"5.11 HOLSTER SHIRT L WHITE";"";""

En este caso usaría un sed expresión en lugar de AWK.

Si sus datos están en un archivo llamado data.txt , puedes conseguirlo escribiendo:

sed "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

Eso imprimirá el resultado en la salida estándar, pero si desea reemplazar el contenido del archivo, simplemente use sed -i de esta manera:

sed -i "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

¡¡Y eso es todo!!

Explicación: El sed expresión consta de tres sed Comandos separados por ";" que puede ejecutar por separado:

sed "s/;/\";\"/g

Hace una sustitución (eso es lo que significa la primera "s"), luego el "/" (el separador predeterminado), ";" eso es lo que queremos reemplazar. Luego el segundo separador "/", y el reemplazo:\";\" Es una secuencia:comilla escapada, punto y coma y comilla escapada. Así que con este comando reemplazaremos los puntos y comas ; por ";" . El último /g significa que cada ; será reemplazado (no solo el primer punto y coma).

Si la entrada fue a;b;c después de ejecutar el primer comando, será a";"b";"c .

Ahora necesitamos agregar comillas al principio (^ en una expresión regular) y al final ($ ). Eso es lo que significa:

sed "s/^/\"/" // the first quote

Y

sed "s/$/\"/" // the last quote

Obtener el resultado deseado:

"a";"b";"c"

Linux
  1. ¿Cuándo son necesarias las comillas dobles?

  2. ¿Cómo escapar de las comillas en Shell?

  3. ¿Cómo agregar nuevas líneas en variables en Bash Script?

  4. Bash Script:¿Cómo asignar cada línea de salida de comando a valores en una matriz?

  5. ¿Cómo hacer que este script sed sea más rápido?

Cómo agregar un borde alrededor del texto en GIMP

Agregar columna al final del archivo CSV usando 'awk' en el script BASH

Bash capturando la salida de awk en una matriz

Eliminar líneas vacías usando sed

Biblioteca de salida de scripts de shell de colores

Sangrado de salida de varias líneas en un script de shell