Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Bash - Datei auslesen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AlPhedo



Anmeldungsdatum: 23.06.2006
Beiträge: 5

BeitragVerfasst am: 23. Jun 2006 2:29   Titel: Bash - Datei auslesen

Hi,

ich hab da ein kleines Problem.
Ich will aus einer Datei (beliebig viele Zeilen) immer jede zweite Zeile auslesen. Dazu muss ich ja wissen wieviel Zeilen meine Datei überhaupt hat.
Ich hab es mit
Code:
var=wc -l $1
versucht das klappt allerdings nicht. Kann mir vielleicht jemand erklären, wie das funktioniert?

mfG Alphedo
 
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 23. Jun 2006 5:54   Titel:

Hi,

nach Deiner Methode müsstest Du schreiben
Code:
var=`wc -l $1`
oder
Code:
var=$(wc -l $1)
Beide Schreibweisen bewirken das gleiche: wc wird ausgeführt und der Output der Variablen var zugewiesen.

Meiner Meinung nach hast Du aber den falschen Ansatz. Auf diese Methode musst Du die Datei zweimal durchlesen, einmal mittels wc und einmal mit der Shell. Einmal reicht aber:
Code:
#!/bin/bash

typeset -i ZEILENZAEHLER=0

while read ZEILE ; do
    (( ZEILENZAEHLER ++ ))
    if (( ZEILENZAEHLER % 2 == 1 )); then
        echo "Ungerade Zeile"
    else
        echo "Gerade Zeile"
    fi
done < eingabedatei
Wenn Du die gerade eilen lieber im then-Zweig behandeln möchtest, ersetze in der if-Bedingung einfach die 1 durch eine 0 (Null).

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 23. Jun 2006 8:29   Titel:

awk ist für sowas gedacht, weil es die Eingabedatei sowieso zeilenweise durchgeht. Dadurch wird das "Programm" sehr simpel:

Code:

$ awk '{ print ; getline }' <Datei


Das Programm "print ; getline" wird für die erste Zeile durchgeführt, was zum Drucken der ersten Zeile, danach zum Einlesen und ignorieren der zweiten Zeile führt -- hinter getline folgt kein weiteres Kommando.

Will man stattdessen die ungeraden Zeilen ausgeben, so nimmt man "getline ; print".

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

AlPhedo



Anmeldungsdatum: 23.06.2006
Beiträge: 5

BeitragVerfasst am: 23. Jun 2006 10:28   Titel:

okay jetzt hat es geklappt und ich hab sogar alles verstanden Smile

danke für eure Hilfe

viele Grüße
AlPhedo
 
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name

Gast
Gast





BeitragVerfasst am: 25. Jun 2006 2:54   Titel:

Weniger tut es auch noch
Code:

#!/bin/sh

while read LINE; do
  echo "U-Zeile: ${LINE}"
  read LINE
  echo "G-Zeile: ${LINE}"
done < eingabedatei

Sollte es jedoch nötig sein, die letzte Zeile auch ohne anhängenden Zeilenvorschub zu fressen, empfehle ich Jankas awk-Version!
Obige sh-Version unterschlägt letzte ungerade ohne NL, Version jochen 23. Jun 2006 5:54 unteschlägt ohne letztes NL gerade+ungerade.
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy