PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Extrahieren einer Zahl aus einer Dateizeile



upperlimit
11.04.2005, 17:56
Hallo,

Ich zerbreche mir gerade den Kopf wegen einer eigentlich einfachen Frage. Dennoch habe ich bisher keine Lösung gefunden.

Ich möchte die Seitenzahl einer postscript-Datei angeben. Das 'psselect'-Kommando liefert mir mittels

psselect -p- file.ps >/dev/null

beispielsweise:

me@home: psselect -p- input.ps >/dev/null
me@home: [1] [2] [3] [4] [5] [6] Wrote 6 pages, 603850 bytes

Nun jedoch möchte ich die Seitenzahl (hier: 6) in einem Shell-Skript weiterverarbeiten.
Wie komme ich an diese Zahl heran ? Da dieses Skript für beliebige postscript-Dateien gültig sein soll, ändert sich somit auch die Position der Zahl innerhalb der Zeile (ein 'cut'-Befehl schliesst sich daher wohl aus, oder?).
Irgendwelche Vorschläge ?

Danke und MfG,
upperlimit

monarch
11.04.2005, 18:55
Schau mal was der da im ersten Suchergebnis macht: Google (http://www.google.de/search?q=postscript+get+number+of+pages&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8&client=firefox&rls=org.mozilla:de-DE:unofficial)

Gibt kaum was was man in google nicht findet. Notfalls auf Englisch. :D

monarch
11.04.2005, 18:56
Mist, Doppelpost.

cremi
11.04.2005, 19:24
grep ^%%Pages InputFile.ps | awk '{ print $2 }'

monarch
11.04.2005, 19:47
Super, genau das hab ich ihm doch oben schon vorgeschlagen

cremi
11.04.2005, 20:10
hab ich nicht gesehen

upperlimit
11.04.2005, 21:01
Hallo,

vielen Dank zunächst einmal für die schnelle Antwort.
Der präsentierte Code funktioniert größtenteils einwandfrei - allerdings nicht uneingeschränkt.
Konkret: Bei vielen postscript-Dateien enthält das Ergebnis neben der Seitenzahl zudem den Code '(atend)' (vom Eintrag: %%Pages: (atend) im postscript-Quellcode), welcher jedoch mittels eines angehängten 'grep -v' eliminiert werden kann.
Allerdings gibt es postscript-Dateien, welche ausser den '(atend)'-Einträgen weitere '%%Pages'-Einträge ausgeben.

Beispiel:
me@home: grep ^%%Pages input.ps | awk '{ print $2 }' | grep -v '(atend)'
me@home: 211
1
1
1
1

Diese Zahlen rühren meines Wissens nach von der Erzeugung mit 'latex' her, sofern man mehrere Unterkapitel (= mehrere tex-Dateien) benutzt.

Dennoch danke nochmals,
upperlimit

upperlimit
11.04.2005, 22:30
Abschliessend möchte ich die Lösung meines Problems vorstellen (der zweite google-Link von oben brachte die Erleuchtung):

Die Zeile

psselect -p_1 input.ps 2>&1 > /dev/null | tr "[]" "\n\n" | grep ^[0-9]

erfüllt demnach alle meine Wünsche.
Ich denke, dem einen oder anderen wird es ebenfalls helfen.

upperlimit

TenBaseT
11.04.2005, 23:52
Frage mich gerade , warum der Bfehl nicht auch zum Erfolg führt


[root@rosi bash-3.0]#
[root@rosi bash-3.0]# awk "/^%%Pages:/ { print $2 }" article.ps
%%Pages: 11
[root@rosi bash-3.0]# wenn ich eine article.awk anlege und aufrufe, dann geht's.
/^%%Pages:/ { print $2 }

[root@rosi bash-3.0]# awk -f article.awk article.ps
11
[root@rosi bash-3.0]#
Hans