88 votos

Cómo imprimir todas las columnas después de un número determinado usando awk?

En el shell, me tubo a awk cuando necesito una columna en particular.

Esto imprime la columna 9, por ejemplo:

... | awk '{print $9}'

¿Cómo puedo saber awk para imprimir todas las columnas incluidas y después de la columna 9, no sólo la columna 9?

82voto

Amadan Puntos 41944
awk '{ s = ""; for (i = 9; i <= NF; i++) s = s $i " "; print s }'

68voto

SiegeX Puntos 32614

Cuando usted quiere hacer una serie de campos, awk no tienen realmente sencilla de hacer esto. Yo recomendaría cut lugar:

cut -d' ' -f 9- ./infile

Editar

Mayor espacio delimitador de campo debido a defecto de ser una ficha. Gracias a Glenn para señalar esto

53voto

Ascherer Puntos 3645
awk '{print substr($0, index($0,$9))}'

10voto

bobbogo Puntos 4201

(Por favor, no downvote esto, es una respuesta seria!) Generalmente perl reemplaza awk/sed/grep et. al., y es mucho más portátil (así como ser un mejor cortaplumas).

perl -lane 'print "@F[8..$#F]"'

Timtowtdi se aplica, por supuesto.

3voto

Robert Vila Puntos 61
awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'

Este chuletas de lo que es antes de que el campo dado, nr., N, y se imprime a todo el resto de la línea, incluyendo el campo de nr.N y mantener el original de la separación (no formatear). No mater si la cadena de caracteres del campo aparece también en otro lugar de la línea, que es el problema con Ascherer la respuesta.

Definir una función:

fromField () { 
awk -v m="\x01" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}

Y utilizarlo como este:

$ echo "  bat   bi       iru   lau bost   " | fromField 3
iru   lau bost   
$ echo "  bat   bi       iru   lau bost   " | fromField 2
bi       iru   lau bost   

Salida mantiene todo, incluyendo espacios Para N=0, devuelve toda la línea, como es, y para n>NF la cadena vacía

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X