![]() |
|
|
google unix.com
|
|||||||
| Fórumok | Regisztráció | Fórum Szabályok | Linkek | Albumok | GYIK | Tagok listája | Naptár | Keres | Mai hozzászólások | Megjelöl Fórumok Olvas |
| 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 |
![]() |
|
|
LinkBack | Téma eszközök | Keresés a téma | Rate Thread | Megjelenítési módok |
|
|
|
||||
|
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: / |
|
||||
|
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 ^ ^ |
|
|||||
|
Idézet:
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:
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:
Idézet:
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 |
|
||||
|
Köszönet nagyon, hogy időt megmagyarázni mindezt radoulov ^ ^, hogy az igazán nagy!
Idézet:
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 ^ ^ |
|
||||
|
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. |
![]() |
| Könyvjelzõk |
| Címkék |
| Solaris |
| Téma eszközök | Keresés a téma |
| Megjelenítési módok | Rate this thread |
|
|