ultimo separador mayor imprimir filtrar comandos columnas campos campo cadena buscar awk gawk

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 !