awk-Script zum laufen bringen

N

ninette111

Grünschnabel
Hallo!

Ich bin gerade dabei ein awk-Script als Filter in Doxygen (ein Werkzeug zur automatischen erstellung von Dokumentationen zu einem Quellcode) einzubauen. Dabei ist mir folgendes aufgefallen:

wenn ich mein script so aufrufe:

Code:
 sh filter.sh


Wobei filter.sh so aussieht

Code:
 #!/bin/sh
awk '{ if($0 ~ /^["\t"| ]*\/\*\*/) {
comment=1;
 mycomment=" ";
 printcomment=0; 
}; if($0 ~ /@since\ 2\.6/) {
 printcomment=1;
}; if (comment==1) {
 mycomment=mycomment "\n" $0;
}else {
print $0;
}; if($0 ~ /[*]\/$/) {
comment=0;
 if(printcomment==1) {
  print mycomment;
}else {
  printcomment=0;
};
}; }' Font.hpp > test5.hpp


..dann funktioniert alles, und macht genau das richtige.

Wenn ich allerdings mein script mit

Code:
 awk -f filter.awk  Font.hpp > test5.hpp


aufrufe, mit folgender datei filter.awk

Code:
#!/bin/awk
{ if($0 ~ /^["\t"| ]*\/\*\*/) {
comment=1;
 mycomment=" ";
 printcomment=0; 
} if($0 ~ /@since\ 2\.6/) {
 printcomment=1;
} if (comment==1) {
 mycomment=mycomment "\n" $0;
}else {print $0;} 
if($0 ~ /[*]\/$/) {
comment=0;
 if(printcomment==1) {
  print mycomment;
}else {
  printcomment=0;}} }

Dann bekomme ich plötzlich sehr viele Parser-Errors (meist " ^ invalid char ' ' in expression:2:")
". Außerdem erkennt er keine Zeilenumbrüche , weil das für ihn ebenfalls invalid characters sind. Warum ist denn das? Wie ist es möglich das Script auf die 2. Variante zum laufen zu bringen (so bräuchte ich es nämlich für Doxygen).

Tipps wären suuuper! :)

LG
Nine.

PS: Die Zeilenumbrüche in den Scriptdateien habe ich nur zur besseren Lesbarkeit eingefügt!
 
Hallo Nine,

mal so auf's geradwohl geraten: Quote doch mal in Deinem awk-script den kompletten Ausdruck mit ' ( also vor der ersten und nach der letzten geschweiften Klammer einmal).
Nicht das hier als $0 awk selber steht. Ansonsten welcher awk ( oder gawk) auf welchem System benutzt Du ?

Grüße
hmh
 
Willkommen im Forum, Nine! :)

Wie sieht die Font.hpp aus? Editierst Du unter Windows?

Gruss, Phorus
 
Hi ja, ich editiere unter Windows!
Ich glaube, das war sogar das Problem, weil jetzt gehts obwohl ich am Quellcode selber nix geändert hab.

Ich hab mir nur aus dem internet ein vorgefertigtes awk-script runtergeladen, darin dann meinen Code geschrieben, und dann is plötzlich gegangen!

Strange!

Danke
nine.
 
Ist nicht "strange" :)

Unter Windows wird das Zeilenende mit "carriage return" und "line feed" (cr lf) gekennzeichnet, unter Unix mit nur mit lf (cr wurde irgendwann wegrationalisiert -> das spart ein byte ;) )

awk stösst also bei Dir auf cr und kann damit nix anfangen -> Fehler

Gruss, Phorus
 

Ähnliche Themen

Switche abfragen über Script

NAS-Drive Mount in Bash-Script über crontab

script sshpass

Verschlüsseltes Backup-Script mit rsync

Grafische Anzeige der Temperatur

Zurück
Oben