Toon posts:

[bash] inlezen van bestanden met meerdere regels

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Heren,

Ik heb een scriptje die niet werkt zoals ik wil
wat de bedoeling is het inlezen van de input bestand daar staat een bron directory in
en het inlezen van de output bestand daar staan output directory's in, voorbeeld :
bestand : inputdirs
/data/input1
/data/input2
enzo voort

In de input directory's staan bestanden die naar de output directory's gekopieerd moeten worden


# check lock file if exists then exit else
# create lockfile for main shell script
if [ -f /data/locks/IPStransfer.lock ]
then
echo lockfile exists /data/locks/IPStransfer.lock
exit
fi
touch /data/locks/IPStransfer.lock

# reading the input / output files

cd /scripts/IPStransfers

$inputdirs = inputdirs
$outputdirs = outputdirs

-------------------------------------------------
# heb het idee dat dit niet gaat werken !!! :(
# for i in $inputdirs; do
# for i in $outputdirs; do
print $inputdirs
print $outputdirs



# cp -af $inputdirs * $outputdirs
# done
# break
------------------------------------------------------

### Ook dit werkt niet :(
while read $inputdirs && read $outputdirs; do
print "$inputdirs$outputdirs"

# cp -af $inputdirs * $outputdirs
done
------------------------------------------------------
# main lock file remove
rm -f /data/locks/IPStransfer.lock


de ------- lijn zijn testjes die ik gemaakt heb maar ik kom er niet uit

Het lijkt alsof mijn input bestanden niet inleest

iemand een idee
Dit is mischien 1 van de basis dingen en heb ook boeken
maar ik kom er niet uit, graag suggesties en zijn er mischien betere manieren.

bedankt alvast

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Lezen van een bestand:
code:
1
2
3
  while read line ; do
     echo "LINE: ${line}"
  done < bestand

Bash is en blijft nogal sukkelen met dit soort dingen. Stel je wilt alles in arrays pleuren, beetje husselen en transformeren dan kan je misschien beter met perl gaan stoeien.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 09:26

JaQ

wat je kan doen is:

filename='config.txt'

for line in `cat $filename | grep -v ^#`; do

$line is nu je regel uit je file...

done

Door de grep -v sluit je alle regels die met # beginnen (en dus commentaar zijn) uit.

Egoist: A person of low taste, more interested in themselves than in me


Verwijderd

Topicstarter
he bedankt ik ga gelijk ff proberen wat ik er van kan bakken.

tnx

Verwijderd

Topicstarter
if [ -f /data/locks/IPStransfer.lock ]
then
echo lockfile exists /data/locks/IPStransfer.lock
exit
fi
touch /data/locks/IPStransfer.lock

# reading the input / output files
# need to create a lock file that skips this
cd /scripts/IPStransfers

while read input1 ;do
echo "input1: ${input1}"

while read output1 ;do
echo "output1: ${output1}"

foreach in1 ($input1) | foreach out1 ($output1)
cp -p $in1 $out1

end
done < outputdirs
done < inputdirs
rm -f /data/locks/IPStransfer.lock



OK hij leest de bestanden geheel in nu wil ik zoals je ziet
cp -p $in1 $out1
doen en dan gaat het niet goed ik moet regel1 van $in1
en regel 1 van $out1 hebben
dan moet hij naar regel 2 gaan van $in1 en $out1
net zolang er geen regels meer zijn.

foreach kan dit blijkbaar niet
moet ik nu met for gaan werken ?

ps ook is het belangrijk dan hij in elke directory van $out1
kijkt of er een lock bestand bestaan zoja doe dan niks op die directory


tnx

ideeen welkom :-)>

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 15-08 23:01

odysseus

Debian GNU/Linux Sid

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

die if (`ps aux | grep mijnscriptnaam | grep -v grep` ne `ps aux | grep mijnscriptnaam | grep -v grep | head -1`);

$il = "/mijn/inputlist";
$ol = "/mijn/outputlist";
$i = 0;

open (IL, "$il");
open (OL, "$ol");
@il = <IL>;
@ol = <OL>;
while (<IL>)
{
  `cp -af $il[$i] $ol[$i]`;
  $i++;
}

En ja, die bovenste check is een verschrikkelijke hack. Ik ben alleen kwijt hoe je je eigen PID kunt opvragen in Perl...parent-PID kan met getppid, maar daar schiet je hier weinig mee op :). Mocht het niet direct werken dan moet je er maar even de perldocumentatie bijpakken :P.

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


Verwijderd

Topicstarter
hmmm ziet er goed uit
maar het probleem is dat de uiteindelijke mensen die het moeten gaan beheren geen perl willen (liefst)
Maar ik zit er hard aan te twijfelen dat ze mooi de rambam kunnen krijgen perl werkt nl ook sneller is mijn id.

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 17-02 12:22

zomertje

Barisax knorretje

sed gebruiken? (die kan wel regel voor regel iets uitvoeren)

Ik snap trouwens nog steeds niet wat je nu precies wil doen.
Alle regels van bestand 1 combineren met dezelfde regels(qua regelnummer) van bestand2 en er dan iets mee doen?

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


Verwijderd

Topicstarter
hmm ik wil eigenlijk bestanden kopieeren van 1 directory naar de andere.
deze directory moet hij uit een txt file halen.
en per directory moet hij in de doel directory kijken of daar een variablenaam.lock staat zoja dan moet hij die directory niet processen en verder gaan
Pagina: 1