[bash]hoe in lus file uitlezen en parsen?

Pagina: 1
Acties:

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 09:32
kep dus iets in een file staan, op elke regel een getal
dus vb:
code:
1
2
3
123456
234567
345678

en cat ik nou per regel er iets uithalen?
t moet dus zoiets worden als
echo dump < `cat bestandmetcijfers`> /mnt/recover.$i | debugfs
en nog een probleem, hoe laat ik dus die $i elke keer met 1 ophogen, in een lus dus?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 15:06

odysseus

Debian GNU/Linux Sid

Op donderdag 24 januari 2002 15:17 schreef Super_ik het volgende:
kep dus iets in een file staan, op elke regel een getal
dus vb:
code:
1
2
3
123456
234567
345678

en cat ik nou per regel er iets uithalen?
t moet dus zoiets worden als
echo dump < `cat bestandmetcijfers`> /mnt/recover.$i | debugfs
en nog een probleem, hoe laat ik dus die $i elke keer met 1 ophogen, in een lus dus?
Heb je ook perl op die bak? Dan zou je het zo kunnen doen:
code:
1
2
3
4
5
6
7
8
#!/usr/bin/perl
my $i = 1;
open (FILE, "/mijn/bestand");
while (<FILE>)
{
  `dump $_ > /mnt/recover.$i | debugfs`;
  $i++;
}

Even in een bestandje zetten of gewoon direct vanaf de commandline hetzelfde doen.
In bash krijg je denk ik iets als 'for i in `cat /mijn/bestand`; do 'dump $i > /mnt/recover.$i | debugfs'; done'. Je krijgt dan alleen geen goed tellende recover.*, is dat echt nodig? Anders moet een of andere bash-goeroe maar even melden hoe je ook alweer op kun tellen in bash; mijn taal blijft toch perl :P .

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
for j in `seq 1 100` ; do echo bla > file.$j ; done


dit doet de lus, waar bij $j van 1 tot 100 loopt.

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 09:32
umj ja die lus appart lukt wel ja. maardan he?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
dan snap ik helaas niet helemaal wat je wilt, wil je het nog es proberen uit te leggen?

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 09:32
jahoor
ff voorbeeldje
code:
1
2
3
4
bestand.txt:
123456
234567
345678

en dan zeg maar zoiets:
code:
1
2
for $i=1; $i <= `cat bestand.txt|wc -l`;$i++
  echo bestand.regel[$i] > bla.$i

het lijkt nergens op natuurlijk, maar t is maar ff om aantegeven wat ik wil

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Ah ja, ik denk dat ik het begrijp : )

Je wil dus de inhoud van regel 10 in bla.10 hebben, en de inhoud van regel 42 in bla.42?
code:
1
length=`cat bestand.txt | wc -l` ; for i in `seq 1 $length` ; do head bestand.txt -n $i | tail -n 1 > file.$i ; done

zou dat moeten doen ongeveer : )

Wat is bash toch weer heerlijk ranzig (:

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 09:32
Op donderdag 24 januari 2002 16:51 schreef blaataaps het volgende:
Ah ja, ik denk dat ik het begrijp : )

Je wil dus de inhoud van regel 10 in bla.10 hebben, en de inhoud van regel 42 in bla.42?
code:
1
length=`cat bestand.txt | wc -l` ; for i in `seq 1 $length` ; do head bestand.txt -n $i | tail -n 1 > file.$i ; done

zou dat moeten doen ongeveer : )

Wat is bash toch weer heerlijk ranzig (:
head bestand.txt -n bla
klein fautje, maar heel erg bedankt :)

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Ah, ik zag het ook toen jij het net poste ; )

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 09:32
bash talkin dirty:
code:
1
lenght=`cat stats.inodes|wc -l`; for i in `seq 1 $lenght`; do echo "dump <`head stats.inodes -n $i |tail -n 1`>  /mnt/recov.$i"|debugfs /dev/hda6 ;done

dit is het geworden :D

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 16-08 16:08

deadinspace

The what goes where now?

Op donderdag 24 januari 2002 17:23 schreef Super_ik het volgende:
bash talkin dirty:
code:
1
lenght=`cat stats.inodes|wc -l`; for i in `seq 1 $lenght`; do echo "dump <`head stats.inodes -n $i |tail -n 1`>  /mnt/recov.$i"|debugfs /dev/hda6 ;done

dit is het geworden :D
He bah ;)
Als op elke regel maar 1 getal staat kun je dit veel eenvoudiger doen met 'for i in `cat <bestand>`'...
Ik zou dan zoiets gedaan hebben:
code:
1
2
3
4
5
6
j=0
for i in $(cat stats.inodes)
do
    j=$((j+1))
    echo "dump < $i > /mnt/recov.$j" | debugfs /dev/hda6
done

Dit is efficienter, want je hoeft niet telkens de hele file te head-en en tail-en. Bovendien vind ik het iets eenvoudiger en netter :)
$() is hetzelfde als `` btw.

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
* blaataaps vindt in bash: hoe ranziger hoe beter : )
Pagina: 1