Garder le format original POST en passant par AWK
-
03-07-2019 - |
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
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);