separador print examples columnas campos awk gawk

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ínea

  • Elimino 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 blanco

  • e 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