awk - mayor - ¿Cómo configurar el separador de campo en una cadena vacía?
comandos en awk (2)
El manual de awk indica que tanto -v FS
como -F
son formas equivalentes de configurar el separador de campo.
La Guía del usuario de GNU Awk -> 4.5.4 Configuración de FS desde la línea de comandos :
FS se puede configurar en la línea de comando. Utiliza el argumento `-F ''para hacerlo.
(...)
El valor utilizado para el argumento a `-F ''se procesa exactamente de la misma manera que las asignaciones a la variable FS incorporada.
Sin embargo, noté que hay una diferencia si lo configuramos en una cadena vacía, no es lo mismo. Probado en mi GNU Awk 4.1.1
.
Esto funciona:
$ awk -F, ''{print $2}'' <<< "a,b,c"
b
$ awk -v FS=, ''{print $2}'' <<< "a,b,c"
b
Pero esto no:
$ awk -F="" ''{print $2}'' <<< "abc"
# $1 contains abc
$ awk -v FS="" ''{print $2}'' <<< "abc"
b
¿Por qué? ¿Esto es porque configurar FS
para vaciar es un gawk
específico?
¿Por qué? ¿Esto es porque configurar FS para vaciar es un gawk específico?
Tenga en cuenta que las normas dicen que los resultados no se especifican si se asigna una cadena vacía a FS
. Algunas versiones de awk
producirán el resultado que mostró arriba en su ejemplo. La versión de awk
en OS/X
emite la advertencia y la salida.
awk: field separator FS is empty
Por lo tanto, el significado especial de establecer FS
en una cadena vacía no funciona en todos los awk
.
Parece que puedes hacer esto:
$ awk -F '''' ''{print $2}'' <<< "abc"
b
Probado en GNU awk (versiones 3.0.4 y 4.1.1) y versión mawk 1.2
Para que quede claro, ¡el espacio entre -F
y ''''
es importante !