print - Cómo imprimir las últimas dos columnas usando awk
awk unix (4)
Todo lo que quiero son las últimas dos columnas impresas.
@jim mcnamara: intente usar paréntesis para alrededor de NF
, es decir, $(NF-1)
y $(NF)
lugar de $NF-1
y $NF
(funciona en Mac OS X 10.6.8 para FreeBSD awk
and gawk
).
echo ''
1 2
2 3
one
one two three
'' | gawk ''{if (NF >= 2) print $(NF-1), $(NF);}''
# output:
# 1 2
# 2 3
# two three
usar gawk muestra el problema:
gawk ''{ print $NF-1, $NF}'' filename
1 2
2 3
-1 one
-1 three
# cat filename
1 2
2 3
one
one two three
Acabo de poner boquiabierto a Solaris 10 M4000: Entonces, gawk es el cuplrito en el problema $ NF-1 contra $ (NF-1). Siguiente pregunta ¿qué dice POSIX? por:
http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html
No hay dirección de una manera u otra. No está bien. gawk implica resta, otras awks implican número de campo o sustracción. hmm.
Puede hacer uso de la variable NF
que se establece en el número total de campos en el registro de entrada:
awk ''{print $(NF-1),"/t",$NF}'' file
esto supone que tienes al menos 2 campos.
awk ''{print $NF-1, $NF}'' inputfile
Nota: esto funciona solo si existen al menos dos columnas. En los registros con una columna obtendrás un falso "-1 column1"