Sie sind nicht angemeldet.

1

15.09.2005, 11:05

awk-Script aufrufen

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:

Quellcode

1
sh filter.sh

Wobei filter.sh so aussieht

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/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

Quellcode

1
awk -f filter.awk  Font.hpp > test5.hpp

aufrufe, mit folgender datei filter.awk

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
]#!/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. 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).

Bitte um Tipps!

LG
Nine.

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

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »ninette111« (15.09.2005, 11:11)


TomH

in keinem Vorstand!

Beiträge: 212

Beruf: Systemadministrator

  • Nachricht senden

2

15.09.2005, 18:29

in Deinem 'filter.awk' steht an erster Stelle ein ']', das muß weg.

und der Aufruf geht auch so
# awk -f filter.awk < FONT.hpp

oder so
# cat FONT.hpp | awk -f filter.awk

oder so
# awk -f filter.awk -- FONT.hpp

SCNR

Bei mir kamen keine Fehler, allerdings werden alle Kommentare weggeschmissen, die "@since 2.6" NICHT enthalten.

wegen:
if(printcomment==1) {
print mycomment;

Hast Du beim austauschen von 'dropcomment' gegen 'printcomment' 0 und 1 vertauscht oder ist das so bezweckt?

Deine Maschine ist nicht zufällig ein Windows? Was sagt
# awk --version


Thomas
Every feature is a bug, unless it can be disabled.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TomH« (15.09.2005, 18:30)


3

15.09.2005, 18:40

Dochdoch, es lag daran, dass ich meine files auf einer windows-Maschine geschrieben hab und deshalb dann der Linux-Compileserver, auf dem das Script laufen soll, probleme mit den unterschiedlichen zeilenumbrüchen hatte.

Ja genau, das ] am Anfang ist mir beim reinkopieren irgendwie reingerutscht :)

Ja, es macht jetzt genau das was ich will, es bleiben nur jene Kommentare, in denen ein @since <Versionsnummer> oder ein \since <versionsnummer> vorkommt.

Liebe Grüße :)
Schönen Abend!
Nine.

Thema bewerten