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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top