Frage

Ich habe ein Problem mit AWK Verwendung von einem Strom ein Feld einfach zu entfernen, unten dargestellt:

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

Ich verwende den folgenden Code, um das erste Feld zu entfernen:

$ awk ‚{1 $ = ""; print}‘example.out

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

Warum ist dies der Fall? Ist dies, weil AWK alle Leerzeichen entfernt - kann dies verhindert werden

Mit freundlichen Grüßen im Voraus

War es hilfreich?

Lösung

http://awk.freeshell.org/RangeOfFields

Enthält eine Beschreibung, wie es geht. Es verbindet auch http://student.northpark.edu/pemente/awk/awktail. txt die 3 Lösungen des Problems enthält. Soweit ich weiß, wenn Sie auf ein Feld zuweisen, dann wird das Ausgabefeld Trennzeichen zusammen alle Felder verketten. So " "+ suddendly ist mit einem Raum zusammenbrach. Nehmen Sie es mit einem Körnchen Salz obwohl, ich bin kein Experte awk. Zum Beispiel versuchen : auf die Variable OFS Zuordnung und Doppelpunkte statt Leerzeichen werden zwischen den Feldern in der Ausgabe führen:

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

Wenn Sie g awk, dann können Sie seine gensub Erweiterung verwenden, die ich ziemlich geradlinig finden zu verwenden:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top