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"