Ich habe einige awk-Code, der wirklich langsam läuft. Das Format meiner Datei ist tabulatorgetrennte 5 Spalten ASCII. Ich Betrieb auf Spalte 5 eine Anzahl von entsprechenden Zeichen zu erhalten, den Wert in Spalte 4Beschleunigen Sie meine awk Befehl? Antwort muss awk sein :)
Beispiel Eingangsleitung zu verändern:
10 5134832 28 N * Aaaaa AAAAaAAAaAAAAaAAAA ^]^a] a^Fa ^] a
Wenn ich "^" in $ 5 finde, möchte ich es nicht zählen, oder das folgende Zeichen. Dann möchte ich herausfinden, wie viele Zeichen ">" oder "<" oder "*" sind und sie aus der Zählung entfernen. Ich schätze mit einem gsub, und 3 Splits ist weniger als ideal, zumal Spalte 5 gelegentlich eine sehr sehr lange Zeichenfolge sein kann.
awk '{l=$4; if($5~/>/ || $5~/</ || $5~/*/) {gsub(/\^./,"");l-=split($5,a,"<")-1;l-=split($5,a,">")-1;l-=split($5,a,"*")-1}
Wenn der Code oben erfolgreich auf der Linie verläuft, wird l sein 27.
ich die umliegenden Teile des Befehls am Weglassen von Seiten, um zu versuchen und konzentriere ich mir eine Frage zu haben.
Also, was ist der beste Schritt, um das schneller zu machen?
Rewrite es in Assembler :) –