La mayoría de las soluciones con awk dejan un espacio. Las opciones aquí evitan ese problema.
Opción 1
Una solución de corte simple (funciona solo con delimitadores individuales):
command | cut -d' ' -f3-
opcion 2
Forzar una recalibración de awk a veces elimina el espacio inicial agregado (OFS) que queda al eliminar los primeros campos (funciona con algunas versiones de awk):
command | awk '{ $1=$2="";$0=$0;} NF=NF'
Opción 3
Imprimir cada campo formateado con printf
dará más control:
$ in=' 1 2 3 4 5 6 7 8 '
$ echo "$in"|awk -v n=2 '{ for(i=n+1;i<=NF;i++) printf("%s%s",$i,i==NF?RS:OFS);}'
3 4 5 6 7 8
Sin embargo, todas las respuestas anteriores cambian todos los FS repetidos entre campos a OFS. Construyamos un par de opciones que no hacen eso.
Opción 4 (recomendada)
Un bucle con sub para eliminar campos y delimitadores en el frente.
Y utilizando el valor de FS en lugar de espacio (que podría modificarse).
Es más portátil, y no provoca un cambio de FS a OFS:
NOTA: El ^[FS]*
es aceptar una entrada con espacios iniciales.
$ in=' 1 2 3 4 5 6 7 8 '
$ echo "$in" | awk '{ n=2; a="^["FS"]*[^"FS"]+["FS"]+";
for(i=1;i<=n;i++) sub( a , "" , $0 ) } 1 '
3 4 5 6 7 8
Opción 5
Es bastante posible construir una solución que no agregue espacios en blanco adicionales (iniciales o finales) y que conserve los espacios en blanco existentes utilizando la función gensub
de GNU awk, ya que esto:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=2 'BEGIN{ a="^["FS"]*"; b="([^"FS"]+["FS"]+)"; c="{"n"}"; }
{ print(gensub(a""b""c,"",1)); }'
3 4 5 6 7 8
También se puede usar para intercambiar un grupo de campos dado un recuento n
:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=2 'BEGIN{ a="^["FS"]*"; b="([^"FS"]+["FS"]+)"; c="{"n"}"; }
{
d=gensub(a""b""c,"",1);
e=gensub("^(.*)"d,"\\1",1,$0);
print("|"d"|","!"e"!");
}'
|3 4 5 6 7 8 | ! 1 2 !
Por supuesto, en tal caso, el OFS se usa para separar ambas partes de la línea, y el espacio en blanco final de los campos todavía se imprime.
NOTA: [FS]*
se utiliza para permitir espacios iniciales en la línea de entrada.
grep | awk
es un antipatrón - quieresawk '/!/ { print $2 }'