2009-09-28 6 views
1

Je suis en train d'écrire un script awk qui prendra la sortie de grep et gèrera joliment le formatage dans un tableau HTML. Le délimiteur est le caractère ":"; le problème que je rencontre est que ce personnage peut aussi apparaître dans le texte. Donc, si je n'utilise que $ 1, $ 2 et $ 3 pour le nom de fichier, le numéro de ligne et le commentaire respectivement, je perds tout ce qui suit:Extraction de plusieurs colonnes sans boucle

Y a-t-il un moyen de dire $ 1, $ 2, puis $ 3? .NR sans explicitement en boucle sur les colonnes et en les concaténant ensemble?

est ici le script jusqu'à présent:

`

#!/usr/bin/awk 

BEGIN { 
    FS=":" 

    print "<html><body>" 
    print "<table>" 
    print "<tr><td>File name</td><td>Line number</td><td>Comment</td></tr>" 
} 

{ 
    print "<tr><td>" $1 "</td><td>" $2 "</td><td>" $3 "</td></tr>" 
} 
END { 
    print "</table>" 
    print "</body></html>" 

}` 

Et une entrée exemple:

./mysql-connector-java-5.0.8/src/com/mysql/jdbc/BlobFromLocator.java:177:  // TODO: Make fetch size configurable 
./mysql-connector-java-5.0.8/src/com/mysql/jdbc/CallableStatement.java:243:  // TODO Auto-generated method stub 
./mysql-connector-java-5.0.8/src/com/mysql/jdbc/CallableStatement.java:836:  // TODO: Do this with less memory allocation 

Répondre

1

begin {FS = ":"; OFS = ":"} {nom = 1 $; nombre = 2 $; 1 $ = ""; 2 $ = ""; comment = substr ($ 0,3); }

+0

C'est intelligent. Mais vous devez être sur un vrai système Unix ou un BSD, pour Gawk je pense que vous avez juste besoin. 'BEGIN {FS =": "; } 'Même sur oawk pourquoi mettre OFS? – DigitalRoss

+0

J'ai essayé sans modifier OFS au début, mais les colonnes ont été changées en espaces dans le champ de commentaire. – ffx

1
{ print gensub(/^[^:]*:[^:]*:/,"","g") } 
+0

Si vous utilisez awk avec l'option de ligne de commande '--re-interval', vous pouvez utiliser'/^ ([^:] *:) {2}/'. Plus lisible lorsque vous avez plus de champs à supprimer. –

+0

Vous voulez dire, "si vous utilisez' gawk' ... " –

+0

Oui, je veux dire' gawk'. ('awk' est souvent un lien symbolique vers' gawk'.) –

Questions connexes