print - awk separador de campos
Imprimir la segunda Ășltima columna/campo en awk (9)
¡No estabas lejos del resultado! Esto lo hace:
awk ''{NF--; print $NF}'' file
Esto disminuye el número de campos en uno, de modo que $NF
contiene el anterior penúltimo.
Prueba
Generemos algunos números e imprimámoslos en grupos de 5:
$ seq 12 | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12
Imprimamos el penúltimo en cada línea:
$ seq 12 | xargs -n5 | awk ''{NF--; print $NF}''
4
9
11
Quiero imprimir la segunda última columna o campo en awk. La cantidad de campos es variable. Sé que debería poder usar $NF
pero no estoy seguro de cómo se puede usar.
Y esto no parece funcionar:
awk '' { print ( $NF-- ) } ''
¿Intentó comenzar de derecha a izquierda con el comando rev? En este caso, solo necesita imprimir la 2da columna:
seq 12 | xargs -n5 | rev | awk ''{ print $2}'' | rev
4
9
11
Es más simple:
awk ''{print $--NF}''
La razón por la que el $NF--
original no funcionó es porque la expresión se evalúa antes del decremento, mientras que la disminución del prefijo se realiza antes de la evaluación.
Pequeña adición a la respuesta aceptada de Chris Kannon: solo imprima si realmente hay una segunda última columna.
(
echo | awk ''NF && NF-1 { print ( $(NF-1) ) }''
echo 1 | awk ''NF && NF-1 { print ( $(NF-1) ) }''
echo 1 2 | awk ''NF && NF-1 { print ( $(NF-1) ) }''
echo 1 2 3 | awk ''NF && NF-1 { print ( $(NF-1) ) }''
)
Primero disminuye el valor y luego lo imprime -
awk '' { print $(--NF)}'' file
O
rev file|cut -d '' '' -f2|rev
Si tiene muchas columnas y desea imprimir todas las nubes pero no las tres en la última, entonces esto podría ayudar
awk ''{ $NF="";$(NF-1)="";$(NF-2)="" ; print $0 }''
Solución Perl similar a la solución awk de Chris Kannon:
perl -lane ''print $F[$#F-1]'' file
Estas opciones de línea de comando se usan:
n
bucle alrededor de cada línea del archivo de entrada, no imprima automáticamente cada líneaElimino las líneas nuevas antes de procesarlas y las vuelvo a agregar después
a
modo autosplit - divide las líneas de entrada en la matriz@F
. Se predetermina a la división en espacios en blancoe
ejecuta el código perl
La matriz @F
autosplit comienza en el índice [0] mientras que los campos awk comienzan con $ 1.
$#F
es la cantidad de elementos en @F
awk '' { print ( $(NF-1) ) }'' file
awk ''{print $(NF-1)}''
Deberia trabajar