» »

bash programiranje

bash programiranje

atomant ::

Imam sledeč problem: v configuracijski datoteki so posamezni sklopi označeni z [SKLOP_A], [SKLOP_B], itd. Vsak sklop ima 2 parametra in sicer param_a=ime_datoteke in param_b=velikost_datoteke-v-bajtih:
[SKLOP_A]
param_a=ime_datoteke
param_b=velikost_datoteke-v-bajtih
[SKLOP_B]
param_a=ime_datoteke
param_b=velikost_datoteke-v-bajtih
.
.
.

Želim namreč primerjati oba parametra s pripadajočo resnično datoteko za posamezen sklop ter če se velikost ne ujema se param_a vpiše v novo datoteko_B, za vsak sklop v novo vrstico.
Kako bi to naredil z bash programiranjem? Ali pa obstaja kakšna enostavnejša varianta (C,php, perl)
lp, S

purgovich ::

hm... sem napisal rešitev v perlu, samo ne vem če je to to kar si hotel
...program prebira en fajl, ter vsaki sklop posebej primerja z istim iz drugega fajla, nato izpiše parametre a v novo datoteko (če so seveda parametri b različni v teh dveh datotekah)

Glede kode pa se opravičujem ker sem še noob v programiranju, pa sem to bolj ali manj spocal skup.

#!/usr/bin/perl

sub preveri {
  ($sklop,$a,$b) = @_;
  open FAJL2, $ARGV[1] or die "$! : $ARGV[1] \n";

  while (<FAJL2>) {
    if (/^\[($sklop)\]/) {
      $a2 = readline(FAJL2);
      $b2 = readline(FAJL2);
      print "$1 $a2 $b2";
      if ($b2 ne $b) {
        open FAJL3, ">>$ARGV[2]";
        $a2 =~ s/^.*=//;
        print FAJL3 "$a2";
        close FAJL3;
      }
    }
  }
  close FAJL2;

}


if (@ARGV < 3) { die "Uporaba : $0  conf_file  true_conf_file nova_datoteka \n" };

open FAJL1, $ARGV[0] or die "$! : $ARGV[0] \n";

while (<FAJL1>) {
  if (/^\[(.*)\]/) {
    $para = readline(FAJL1);
    $parb = readline(FAJL1);
    &preveri($1,$para,$parb);
  }
#  print $_;
}

Jean-Paul ::

while read xxx; do IFS='=' read xxx fname; IFS='=' read xxx fsize; FILESIZE=$(stat -c%s "$fname"); if [[ $fsize -ne $FILESIZE ]]; then echo $fname; fi; done < sklop.cfg

atomant ::

Sem pozabil napisat, da bi to uporabil na FreeBSD 7 mašini.

@Jean-Paul: ja to je to ampak opcija -c pri ukazu stat je v FreeBSD neveljavna:
------------
[root@server ~]# stat -c%s datoteka
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
------------

@purgovich: mislim, da si me narobe razumel. Iz datoteke A primerjam parametre z resnično velikostjo in imenom datoteke X za vsaki sklop posebej.
lp, S

fiction ::

Ekvivalent "stat -c%s datoteka" je na FreeBSD-ju "stat -f%z datoteka".
Se pa da velikost datoteke v bajtih dobiti tudi na kaksen drug (malo daljsi) nacin.

Sicer pa se vedno ne razumem tocno problema.
Recimo ce pise:

[SKLOP_A]
param_a=datoteka1
param_b=100

in ti dobis v trenutnem direktoriju datoteko datoteka1, ki je velika 200 bajtov hoces
v tej konfiguracijski datoteki spremeniti vrstico, da bo param_b=200?

atomant ::

Ekvivalent "stat -c%s datoteka" je na FreeBSD-ju "stat -f%z datoteka".
Se pa da velikost datoteke v bajtih dobiti tudi na kaksen drug (malo daljsi) nacin.

Sicer pa se vedno ne razumem tocno problema.
Recimo ce pise:

[SKLOP_A]
param_a=datoteka1
param_b=100

in ti dobis v trenutnem direktoriju datoteko datoteka1, ki je velika 200 bajtov hoces
v tej konfiguracijski datoteki spremeniti vrstico, da bo param_b=200?


Hvala za stat.

Ne, jaz hočem, da se v tem primeru samo ime datoteke (datoteka1) vpiše v novo datoteko.log
lp, S

Zgodovina sprememb…

  • spremenil: atomant ()

snow ::

Dajte v naslov bolj pameten naslov. Naslov problema.

Vse teme v tem oddelku so v zvezi s programiranjem ;)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c] Enaki datoteki

Oddelek: Programiranje
71032 (892) Spura
»

[C++][Naloga] Tekstovne datoteke, realna števila

Oddelek: Programiranje
254017 (3633) Gundolf
»

Unix ukaz

Oddelek: Operacijski sistemi
61077 (1008) iNN
»

c# vprasanje

Oddelek: Programiranje
171846 (1525) user4683

eMULE in nje problemi

Oddelek: Programska oprema
141745 (1226) Gandalfar

Več podobnih tem