Question

J'ai un problème avec l'utilisation de AWK pour supprimer simplement un champ d'un flux, illustré ci-dessous:

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

J'utilise le code suivant pour supprimer le premier champ:

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

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

Pourquoi est-ce le cas? Est-ce parce qu'AWK supprime tous les espaces - cela peut-il être évité?

Cordialement à l'avance

Était-ce utile?

La solution

http://awk.freeshell.org/RangeOfFields

Contient une description de la procédure à suivre. Il contient également des liens vers http://student.northpark.edu/pemente/awk/awktail. txt qui contient 3 solutions au problème. Autant que je sache, si vous affectez un champ, le séparateur de champ de sortie est utilisé pour concaténer tous les champs. Donc, " " + soudain est réduit à un espace. Prenez-le avec un grain de sel cependant, je ne suis pas un expert en awk. Par exemple, essayez d’attribuer : à la variable OFS , et les deux points au lieu d’espaces donneront lieu entre les champs de la sortie:

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

Si vous utilisez g awk, vous pouvez utiliser son extension gensub que je trouve assez simple à utiliser:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top