Manteniendo el formato original POST pasando por AWK.
-
03-07-2019 - |
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
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);