Portál AbcLinuxu, 12. května 2025 21:32

Dotaz: Porovnat dva soubory

Slick avatar 9.6.2006 09:02 Slick | skóre: 4
Porovnat dva soubory
Přečteno: 174×
Odpovědět | Admin
Zdravim vsechny!

Mam takovy maly problemek, potreboval bych porovnat dva soubory error.list a unitBoot.log a vypsat vsechny radky ve kterych se vyskytuji dana slova ze seznamu v error.listu.


Napr:
cat error.list
out of range
error
not found
...

cat unitBoot.log
klo asd a 1432lo error N9989KJ
xxxxxxxxxx BOOT xxxxxxxxxxxx
#we009 -pioj out of order UNIT#10098
kl N#232309 kkj a<$ALLOWED
...

Jde o to dokazat dana slova najit mezi ostatnima na radku. Predpokladam nejaky for loop a grep nebo nawk.


Predem diky
Slick@ksh.Solaris
As Barbie says: "Unix is complicated."
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.6.2006 09:11 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: Porovnat dva soubory
Odpovědět | | Sbalit | Link | Blokovat | Admin
man grep
...
  -f FILE, --file=FILE
      Obtain  patterns  from  FILE, one per line.  The empty file con‐
      tains zero patterns, and therefore matches nothing.
Slick avatar 9.6.2006 14:42 Slick | skóre: 4
Rozbalit Rozbalit vše Re: Porovnat dva soubory
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takze funkce ktera to resi vypada takhle:
Funkce vezme oba soubory, prohleda radek po radku unit.log, pokud radek obsahuje kterekoliv slovo z error.listu tak radek vrati jako vyhovujici

function findMsg {

f=` cat unit.log ` # where to search
g=` cat error.list ` # what to search

for a in ` echo $f` ; do
for b in ` echo $g `; do
echo $a | nawk ' / '$b' / '
done
done

return 0

}
As Barbie says: "Unix is complicated."
9.6.2006 14:59 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Porovnat dva soubory
Heh, tak to je nářez. Mohl bych požádat správce, aby vymazal příspěvek, na který reaguji. Jde mi o to, aby si nějaký začátečník náhodou nevzal příklad z toho nehorázného paskvilu :-(

P.S.: Navíc ještě nefunkčního.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
Slick avatar 9.6.2006 15:09 Slick | skóre: 4
Rozbalit Rozbalit vše Re: Porovnat dva soubory
Paskvil mozna, ale me na Solarisu8 funguje,

BTW: Nejvic me dostalo, kdyz je si pred chvilkou pozorne
precet man grep

/usr/xpg4/bin/grep -f error.list unit.log

Tenhle jednoradkovy prikaz totiz dela naprosto to same jako moje funkce :-) BTW: Cela funkce je psana pro ksh ;-)
As Barbie says: "Unix is complicated."
9.6.2006 15:40 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Porovnat dva soubory
$ cat error.list 
kuku
huhu
$ cat unit.log 
uhuh kuku yuguy
 uiwhihweih
$ findMsg 
kuku
$ grep -f error.list unit.log 
uhuh kuku yuguy
Tomu já říkám nefunguje, neodpovídá zadání a je to přímo zbírka špatných postupů.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
Slick avatar 10.6.2006 06:10 Slick | skóre: 4
Rozbalit Rozbalit vše Re: Porovnat dva soubory
Zbírka, Snad sbírka ne?
As Barbie says: "Unix is complicated."
10.6.2006 09:19 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Porovnat dva soubory
Odpovědět | | Sbalit | Link | Blokovat | Admin
Má to vyhledávat opravdu slova anebo spíš řetězce? Teď už je asi zřejmé, že jde o řetězce, ale už jsem to napsal pro vyhledávání slov
['of', 'range', 'error', 'not', 'found', 'out']
tak tady to je.
python << oznac_tohle_cele_mysi_a_zkopiruj_na_prikazovou_radku
words = {}
for line in file('error.list'):
    for word in line.split():
        words[word] = None
for line in file('unitBoot.log'):
    for word in line.split():
        if words.has_key(word):
            print line.rstrip()
            break
oznac_tohle_cele_mysi_a_zkopiruj_na_prikazovou_radku
Však chleba to neptá.
Slick avatar 10.6.2006 22:37 Slick | skóre: 4
Rozbalit Rozbalit vše Re: Porovnat dva soubory
Samozrejme ze to vyhledava retezce, omlouvam se za spatnou formulaci.

neni treba na to psat zvlastni funkci, staci pouzit grep. Juknete na man grep, hledejte parametr -f ;-)
As Barbie says: "Unix is complicated."

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.