The UNIX and Linux Forums  

Go Back   A UNIX és Linux Forums > Top Fórumok > Shell programozás és Scripting
.
google unix.com



Shell programozás és Scripting Post kérdések KSH, CSH, SH, Bash, Perl, PHP, SED, AWK ÉS EGYÉB shell szkriptek és shell script nyelvek itt.

Több, UNIX és Linux fórum témák Ön által talált Hasznos
Szál Thread Starter Fórum Válaszok Utolsó hozzászólás
Sed Súgó Aktualizálás valamit csak egy adott fájlt. bisla.yogender Shell programozás és Scripting 4 03-24-2008 11:48 AM
Annak eldöntéséhez, hogy a fájl frissítése nem raj333 Shell programozás és Scripting 2 11-05-2007 05:29 PM
Aktualizálás fájlt hurok agyelszívást Shell programozás és Scripting 4 06-20-2007 02:37 PM
Miért sar nem frissíti a kimeneti fájlt. skneeli A UNIX a fejlett és szakértői Felhasználók 1 11-12-2006 08:29 PM
Aktualizálás fájl egy ZIP archívum dbridle AIX 6 09-27-2006 04:29 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Téma eszközök Keresés a téma Rate Thread Megjelenítési módok
  #1 (permalink)  
Old 06-09-2008
MECANO mecano is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2008
Hozzászólások: 4
awk frissítése egy fájlt egy másik, összehasonlítása, frissítése

Helló,
Elolvastam és keresgélni ezt a csodálatos fórumot, és megpróbáltam a különböző megközelítések, de úgy látszik, hiányzik belőlük némi tudás és a neuronok ^ ^

Itt van, amit szeretnék elérni:

fájl1:
teszt filea 3.495;
teszt fileb 4.578;
teszt filec 7.689;
teszt Filey 9.978;
teszt filez 12.300;

fájl2:
teszt filea 3.495;
vizsgálatot iktatott 4.578;
teszt filec 7.689;
teszt filex 8.978;

Eredmények:
teszt filea 3.495;
vizsgálatot iktatott 4.578;
teszt filec 7.689;
teszt filex 8.978;
teszt Filey 9.978;
teszt filez 12.300;

összehasonlítás alapján utolsó mező (mező $ 3), új tartalmakat fájl2 (itt a tartalom "kulcs" 8.978 új) fel kell venni a végső kimenet és tartalmát, amely különbözik a fájl2 (test iktatott 4.578; itt) fel kellene váltania egy fájl1 .

Itt, ahol most vagyok:

awk 'NF (key \u003d $ NF; kulcsok [kulcs] + +) NR \u003d\u003d FNR (key1 [kulcs] \u003d $ NF ORS; rec1 [kulcs] \u003d $ 0 ORS;) (következő key2 [kulcs] \u003d $ NF ORS; rec2 [kulcs] \u003d $ 0 ORS, azután) END (for (k in gombok) (if (key1 [k] \u003d\u003d key2 [k]) (print rec2 [k]) else (print rec1 [k]))) ' fájl1 $ $ fájl2> $ file1.updated

az olvashatóság:

awk '
NF
(
key \u003d $ NF;
kulcsok [kulcs] + +
)
NR \u003d\u003d FNR
(
kulcs1 [kulcs] \u003d $ NF ORS;
rec1 [kulcs] \u003d $ 0 ORS;
következő
)
(
kulcs2 [kulcs] \u003d $ NF ORS;
rec2 [kulcs] \u003d $ 0 ORS;
következő
)
VÉGE
(
for (k in gombok)
(
if (key1 [k] \u003d\u003d key2 [k])
(
print rec2 [k]
)
vagy
(
print rec1 [k]
)
)
)
fájl1 $ $ fájl2> $ file1.updated

de .. ez nem működik jól: /
  #2 (permalink)  
Old 06-09-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
Addict
  
 

Join Date: Jan 2007
Helyszín: Варна, България / Milano, Olaszország
Hozzászólások: 2.926
Ha a sorrend nem fontos:

(használd nawk / vagy usr/xpg4/bin/awk Solaris)


Kód:
awk 'END{for(k in _)print _[k]}{_[$NF]=$0}' file1 file2

Ellenkező esetben, mivel a példa:


Kód:
awk 'END{for(k in _)print _[k]}{_[$NF]=$0}' file1 file2 |
  sort -k3n


Last edited by radoulov; 06-09-2008 at 10:39 AM..
  #3 (permalink)  
Old 06-09-2008
MECANO mecano is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2008
Hozzászólások: 4
oh my ....

Nagyon köszönöm!

Azt hittem, hogy a megoldás valami ilyesmi tárolni gombok fájl1, hajtogat őket fájl2, majd fordított az iteráció találni hiányzó nyilvántartások ... Én egyáltalán nem volt távol a szépségét awk ...

ha jól értem pontosan, awk beolvassa a fájlokat, és automatikusan a két egyesült rekordok magát? Ez azt jelenti, hogy nem kell tárolni értékeket fájl1 összehasonlítani őket, hogy FÁJL2? ... Nyílik

Két dolgot nem értem: hogyan használják az aláhúzást (miközben azt hiszem ez áll "minden rekordok olvasni"?), És miért ér véget a végén?

About the sort parancs nem volna nem a ";"? Tudja, hogyan kell meghatározni "utolsó mező" a vonal a sort? , Vagy valami hasonló:
| Awk '(printf substr ($ NF, 1, length ($ NF) -1); $ NF \u003d ""; printf "% s \ n", $ 0)' | sort-n | awk '(printf "% s % s \ n ", $ 0, $ 1) '| awk' ($ 1 \u003d" "; sub (/ ^ + /," ") printf"% s \ n ", $ 0) '
előnyben?

Thanks a lot again radoulov ^ ^
  #4 (permalink)  
Old 06-09-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
Addict
  
 

Join Date: Jan 2007
Helyszín: Варна, България / Milano, Olaszország
Hozzászólások: 2.926
Idézet:
Originally Posted by MECANO View Post
[...]
ha jól értem pontosan, awk beolvassa a fájlokat, és automatikusan a két egyesült rekordok magát? Ez azt jelenti, hogy nem kell tárolni értékeket fájl1 összehasonlítani őket, hogy FÁJL2? ... Nyílik
[...]
Használ az asszociatív tömb (egy hash), így garantálja az egyediség
A kulcs ($ NF ebben az esetben), és ez az érték fáradozik az utolsó látja
(az egy a file2). Fogja társítani, hogy minden gomb ($ NF) a teljes rekord ($ 0), és frissíti az értéket, ha látja ugyanazt a gombot.

Idézet:
Két dolgot nem értem: hogyan használják az aláhúzást (miközben azt hiszem ez áll "minden rekordok olvasni"?), És miért ér véget a végén?
Nos, ez a fajta stílus az írás,
ez azt szeretnénk, hogy a kód is olvasható,
Ön is használja ezt, hanem (és ez összeegyeztethető még a régi sima Solaris awk):


Kód:
awk '{
  key_record[$NF] = $0     # associate key ($NF) with entire record ($0) 
  }
END { 
  # after the entire input has been read 
  for (key  in key_record) # for every key stored
    print key_record[key]  # print the associated value
    }' file1 file2

Idézet:
About the sort parancs nem volna nem a ";"?
Azt hiszem, a sort parancs leadott megfelelően. Van egy példa, amelyben az input, mint ez nem helyes sorrendje?

Idézet:
Tudja, hogyan kell meghatározni "utolsó mező" a vonal a sort?
, Vagy valami hasonló:
| Awk '(printf substr ($ NF, 1, length ($ NF) -1); $ NF \u003d ""; printf "% s \ n", $ 0)' | sort-n | awk '(printf "% s % s \ n ", $ 0, $ 1) '| awk' ($ 1 \u003d" "; sub (/ ^ + /," ") printf"% s \ n ", $ 0) '
előnyben?
Miért? Nem az utolsó mező meghatározott állásban?
Ebben az esetben én is megyek:


Kód:
perl -lane'
  $h{$F[-1]} = $_;
  print join "\n", map $h{$_}, sort {$a <=> $b} keys %h 
    if eof'

Vagy (ha ön igazán akar-hoz megszabadulni a ";", míg válogatás):


Kód:
perl -lane'
  chop $F[-1] and $h{$F[-1]} = $_;
  print join "\n", map $h{$_}, sort {$a <=> $b} keys %h 
    if eof'

Ellenkező esetben használja sort + héj:


Kód:
read<file;set -- $REPLY;sort -k$#n file

  #5 (permalink)  
Old 06-09-2008
MECANO mecano is offline
Regisztrált felhasználó
  
 

Join Date: Jun 2008
Hozzászólások: 4
Köszönet nagyon, hogy időt megmagyarázni mindezt radoulov ^ ^, hogy az igazán nagy!

Idézet:
Azt hiszem, a sort parancs leadott megfelelően. Van egy példa, amelyben az input, mint ez nem helyes sorrendje?
továbbá nem adott eset de én emlékezett rá, hogy a szalag "," hogy képes használni a "sort-n" helyesen (nincs megadva a kulcs, én csak kivonat a területen az elmúlt awk majd alkalmazni kell sort-n hozzá. Kár "fajta" nem teszi lehetővé a fordított kulcsválasztási), például az értékek, mint:
27.384;
7.384, vagy 384;
Próbáltam, de olyan sok különböző dolgot, azt hiszem ez kell maradnia néhány mistypes / hibák az én oldalamon vagy, mert a Windows sorvég néhány fájl úgy tűnik, hogy (néhány adatállományt a Windows és egyes Unix)?

No az utolsó mező nem fix, mert én vagyok a bash script segédprogram az SQL lekérdezések kép válogatás / aktualizálása, ezt fel kell használni a különböző fájlok, ha a mezők száma nem mindig ugyanaz, és ahol a legfontosabb érték lehet , ritkán, de előfordul, a közepén a vonal.
Tehát ebben az esetben a bevétel egy $ key paraméterekkel cli:
awk 'END (for (k in _) print _ [k ]}{_[$'"$ kulcs "']\u003d$ 0) "$ fájl1 $ fájl2> $ file1.updated
egy Additionnal feltétele érv "0" az a sor végére (mert nem kaptam $ key alakulni NF és figyelembe awk ' "$ key").
Én így egy kis közösség, és azt kell igazán egyszerű.
Ha nem félsz olvasni awfull kódot tudom post it ^ ^
  #6 (permalink)  
Old 06-10-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
Addict
  
 

Join Date: Jan 2007
Helyszín: Варна, България / Milano, Olaszország
Hozzászólások: 2.926
Idézet:
[...]
Ha nem félsz olvasni awfull kódot tudom post it ^ ^
Igen, persze, post it.
Is kaphat hasznos tanácsokat itt.
  #7 (permalink)  
Old 09-12-2008
s.rajkumar s.rajkumar is offline
Regisztrált felhasználó
  
 

Join Date: Aug 2008
Hozzászólások: 1
Szia Nagyon újak awk & unix, én nagyon hasonló a követelmény, hogy ez ..

Azt akarom összehasonlítani az első oszlop,

fájl1:
0.000-00.058 | Zöld
0.000-00.059 | Zöld
0.000-00.060 | Zöld
0.402-01.055 | Zöld
0.402-01.058 | Zöld
0.402-01.059 | Zöld
0.402-01.061 | Zöld
0.402-01.065 | Zöld



fájl2:
0.000-00.057 | Red
0.000-00.058 | Kék
0.000-00.059 | Red
0.000-00.060 | Kék


Saját eredményt kell

0.000-00.058 |Kék
0.000-00.059 |Vörös
0.000-00.060 |Kék
0.402-01.055 | Zöld
0.402-01.058 | Zöld
0.402-01.059 | Zöld
0.402-01.061 | Zöld
0.402-01.065 | Zöld

0.000-00.057 | Red

várja meg a választ ...
Thank u.
Closed Thread

Könyvjelzõk

Címkék
Solaris

Téma eszközök Keresés a téma
Keresés a téma:

Részletes keresés
Megjelenítési módok Rate this thread
Rate this thread:

Posting szabályzat
Ön nem post new threads
Ön nem post válaszok
Ön nem post Csatolmányok
Ön nem szerkeszteni az üzeneteidet

BB kód van Be
Smilies vannak Be
[IMG] kód Be
HTML kód Ki
Trackbacks vannak Be
Pingbacks vannak Be
Refbacks vannak Be




Minden idő GMT -4. Az idő most 02:12 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Nyelvre lefordítva Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
A UNIX és Linux Fórum Tartalom Copyright © 1993-2009. Minden jog Reserved.Ad menedzsment RedTyger

Content Relevant URLs by vBSEO 3.2.0