Archiv der Kategorie: Dateibearbeitung

Ghostscript

Auflösung von PDF-Dateien verändern (z. B. um ein PDF-Dokument mit sehr hochauflösenden Bildern für den E-Mail-Versand zu komprimieren):

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Für PDFSETTINGS sind folgende Optionen möglich:

  • /screen (nur für Bildschirmanzeige – 72 dpi)
  • /ebook (geringe Qualität – 150 dpi)
  • /printer (hohe Qualität – 300 dpi)
  • /prepress: (hohe Qualität mit hoher Farbtreue – 300 dpi)

Ein fertiges Skript für Nautilus gibt es unter http://launchpad.net/compress-pdf. Hier noch eine Kurzanleitung zur Installation des Skripts:

$ sudo apt-get install zenity ghostscript libnotify-bin
$ cd ~/.gnome2/nautilus-scripts
$ wget http://launchpad.net/compress-pdf/1.x/1.4/+download/Compress-PDF-1.4.tar.gz
$ tar -xzf Compress-PDF*.tar.gz && rm Compress-PDF*.tar.gz

Beispiele, wie PDF-Dateien in Bilder umgewandelt werden können zeigen die Artikel pdf2bmp und pdf2jpg

Wörter zählen

Folgendes Skript zählt die (verschiedenen) Wörter in einer Datei.

  1. Ermittle, welche Zeichen Wörter trennen.
  2. Ersetze diese Zeichen durch \n-Zeichen, so dass auf jeder Zeile nur ein Wort steht.
  3. Entferne leere Zeilen.
  4. Wandle alle Großbuchstaben in Kleinbuchstaben um.
  5. Sortiere alles.
  6. Zähle die mehrfach vorkommenden Zeilen und gebe die Statistik aus.

Als pipe formuliert sieht die Lösung wie folgt aus:

tr ' :.,;()"' '\n\n\n\n\n\n\n\n' < Eingabe.txt | # 1, 2
grep -v '^$' |                                   # 3
tr 'A-ZÖÜÄ' 'a-zöüä' |                           # 4
sort |                                           # 5 
uniq -c                                          # 6

read

Liest eine Zeichenkette von der Standardeingabe ein.
-n Anzahl der einzulesenden Zeichen
-s x Wartet maximal x Sekunden auf die Eingabe
-p Text gibt „Text“ vor dem Einlesen auf der Standardausgabe aus

read -n 1 -s 5 eingabe
 if [ $? -eq 1 ] ; then
 echo "Zeitüberschreitung für die Eingabe ..."
 fi
echo $eingabe

Datei zeilenweise einlesen

Mit while:

while read LINE; do 
  echo ${LINE[1]} 
done < infile.txt

Aufruf über File-Descriptor (ermöglicht direkten Zugriff auf die Datei „datendatei“):

exec 3<Datendatei
while read -u 3; do
  echo ${REPLY} 
done
exec 3<&-

IP-Adressen aus einer Datei auslesen (Durch setzen des Punktes in der Trennzeichenvariablen IFS werden die durch „read“ eingelesenen IP-Adressen aufgeteilt und in die Array-Variable „IP“ geschrieben):

exec 3<iplist 
IFS=".${IFS}" 
while read -u 3 -a IP; do 
 echo ${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
done 
exec 3<&-