Domanda

Ho un problema con l'utilizzo di AWK per rimuovere semplicemente un campo da uno stream, illustrato di seguito:

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

Uso il seguente codice per rimuovere il primo campo:

$ awk '{$ 1 = " " ;; print} 'esempio.out

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

Perché è così? Questo perché AWK rimuove tutto lo spazio bianco - è possibile prevenirlo?

Cordiali saluti in anticipo

È stato utile?

Soluzione

http://awk.freeshell.org/RangeOfFields

Contiene una descrizione su come farlo. Si collega anche a http://student.northpark.edu/pemente/awk/awktail. txt che contiene 3 soluzioni al problema. Per quanto ne so, se si assegna a un campo, il separatore del campo di output viene utilizzato per concatenare tutti i campi insieme. Quindi " " + viene improvvisamente compresso in uno spazio. Prendilo con un po 'di sale, però, non sono un esperto imbarazzante. Ad esempio, prova ad assegnare : alla variabile OFS e i due punti anziché gli spazi comporteranno tra i campi nell'output:

echo a b c | awk 'BEGIN{ OFS = ":" } { $1=""; print }'
$ :b:c

Se usi g awk, puoi usare la sua estensione gensub che trovo piuttosto semplice da usare:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top