2009-01-03 8 views
3

J'ai un problème avec l'aide AWK simplement supprimer un champ d'un flux, illustré ci-dessous:Garder POST format d'origine en passant par AWK

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 que AWK supprime tous les espaces - cela peut-il être évité?

Amicalement à l'avance

Répondre

2

http://awk.freeshell.org/RangeOfFields

Contient une description comment le faire. Il lie également à http://student.northpark.edu/pemente/awk/awktail.txt qui contient 3 solutions au problème. Pour autant que je sache, si vous affectez à un champ, alors le séparateur de champ de sortie est utilisé pour concaténer tous les champs ensemble. Donc, " "+ est soudainement réduit à un espace. Prenez-le avec un grain de sel cependant, je ne suis pas un expert awk. Par exemple, essayez d'affecter : à la OFS variable et côlons au lieu des espaces résulteront 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); 
+0

Merci pour votre aide Litb;) Merci beaucoup ... – Aaron

Questions connexes