Pregunta

Tengo un problema con el uso de AWK para simplemente eliminar un campo de una secuencia, que se ilustra a continuación:

  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }       
  6         return 0;
  7 }  

Uso el siguiente código para eliminar el primer campo:

$ awk '{$ 1 = " " ;; imprimir} 'example.out

 int blah (void)
 {
 if (foo) {
 printf ("blah\n");
 }
 return 0;
 }

¿Por qué es este el caso? ¿Se debe a que AWK elimina todo el espacio en blanco? ¿Se puede evitar?

Saludos cordiales por adelantado

¿Fue útil?

Solución

http://awk.freeshell.org/RangeOfFields

Contiene una descripción de cómo hacerlo. También se enlaza a http://student.northpark.edu/pemente/awk/awktail. txt que contiene 3 soluciones al problema. Que yo sepa, si asigna a un campo, entonces el separador de campo de salida se utiliza para concatenar todos los campos juntos. Entonces " " + de repente se contrae en un espacio. Tómalo con un grano de sal, sin embargo, no soy un gran experto. Por ejemplo, intente asignar : a la variable OFS , y los dos puntos en lugar de espacios resultarán entre los campos en la salida:

echo a b c | awk 'BEGIN{ OFS = ":" } { $1=""; print }'
$ :b:c

Si usas g awk, entonces puedes usar su extensión gensub , que encuentro bastante fácil de usar:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top