Mantenere il POST in formato originale passando attraverso AWK
-
03-07-2019 - |
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
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);