Supprimer les espaces devant un champ à l'aide de AWK
-
03-07-2019 - |
Question
( Copie presque exacte de Maintien du format original POST via AWK soumis par la même personne. )
J'ai une question simple concernant g awk, illustrée ci-dessous:
1 int blah (void)
2 {
3 if (foo) {
4 printf ("blah\n");
5 }
6 return 0;
7 }
Utilisation du code gawk suivant - utilisation de gensub () pour conserver le formatage original:
gawk '{ print gensub($1, "\t", 1) }' ./sample_code.out
int blah (void)
{
if (foo) {
printf ("blah\n");
}
return 0;
}
Comment puis-je utiliser g awk ou awk (peut-être avec des expressions régulières) pour supprimer les espaces précédents du champ $ 1 (^)
Illustré ci-dessous:
int blah (void)
{
if (foo) {
printf ("blah\n");
}
return 0;
}
Cordialement à l'avance
La solution
Cela fonctionne, mais sachez que vous voudrez toujours supprimer 3 espaces.
vinko@parrot:~$ cat foo.c 1 int blah (void) 2 { 3 if (foo) { 4 printf ("blah\n"); 5 } 6 return 0; 7 } vinko@parrot:~$ gawk '{ print gensub(/^ /,"",1,gensub($1, "", 1)) }' foo.c int blah (void) { if (foo) { printf ("blah\n"); } return 0; }
Autres conseils
awk '{sub(/^[ \t]+/, ""); print}'
Ceci est tiré de la célèbre liste des doublures de awk 1. Vous pouvez le trouver ici: http: //student.northpark.edu/pemente/awk/awk1line.txt
Cela me semble être un cas de "mauvais outil pour le travail". J'utiliserais sed`:
sed 's/^[ <tab>]*//' sample.out
Maintenant, si le problème concerne uniquement les détails les plus internes de awk
, il se peut que cela ne soit pas une aide; si le problème est de supprimer des espaces, il est plus rapide et (du moins sans doute) plus simple.