Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 20. Nov 2018 18:19

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bash - Datei auslesen
BeitragVerfasst: 23. Jun 2006 2:29 
Offline
Benutzeravatar

Registriert: 23. Jun 2006 2:23
Beiträge: 5
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Jun 2006 5:54 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 14. Jan 2000 15:37
Beiträge: 699
Wohnort: Jülich
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..."


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Jun 2006 8:29 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
awk ist für sowas gedacht, weil es die Eingabedatei sowieso zeilenweise durchgeht. Dadurch wird das "Programm" sehr simpel:
Code:
$ awk '&#123; print ; getline &#125;' <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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23. Jun 2006 10:28 
Offline
Benutzeravatar

Registriert: 23. Jun 2006 2:23
Beiträge: 5
okay jetzt hat es geklappt und ich hab sogar alles verstanden :-)

danke für eure Hilfe

viele Grüße
AlPhedo


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25. Jun 2006 2:54 
Weniger tut es auch noch
Code:
#!/bin/sh

while read LINE; do
  echo "U-Zeile&#58; $&#123;LINE&#125;"
  read LINE
  echo "G-Zeile&#58; $&#123;LINE&#125;"
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.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de