Domanda

( Duplicazione quasi esatta di Mantenimento del POST del formato originale passando per AWK inviato dalla stessa persona. )

Ho una semplice domanda relativa a g awk, illustrata di seguito:

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

Usando il seguente codice gawk - usando gensub () per mantenere la formattazione originale:

 gawk '{ print gensub($1, "\t", 1) }' ./sample_code.out

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

Come posso usare g awk o awk (forse con espressioni regolari) per rimuovere spazi bianchi precedenti prima del campo $ 1 (^)

Illustrato di seguito:

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

Cordiali saluti in anticipo

È stato utile?

Soluzione

Funziona, ma nella consapevolezza che vorrai sempre spogliare 3 spazi.

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;
}

Altri suggerimenti

awk '{sub(/^[ \t]+/, ""); print}'

Questo è dal famoso elenco di fodere awk 1, disponibile qui: http: //student.northpark.edu/pemente/awk/awk1line.txt

Questo mi sembra un caso di "strumento sbagliato per il lavoro". Userei sed`:

sed 's/^[ <tab>]*//' sample.out

Ora, se il problema riguarda i dettagli più interni di awk , questo potrebbe non essere d'aiuto; se il problema è rimuovere gli spazi, è più veloce e (almeno discutibilmente) più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top