The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Sed Hjælp i Ajourføring noget kun i en bestemt fil. bisla.yogender Shell Programmering og Scripting 4 03-24-2008 11:48 AM
At vide, om filen er ajourføring eller ej raj333 Shell Programmering og Scripting 2 11-05-2007 05:29 PM
Ajourføring fil i sløjfe braindrain Shell Programmering og Scripting 4 06-20-2007 01:37 PM
Hvorfor min sar ikke ajourføre outputfil. skneeli UNIX for Advanced & Ekspertsøgning Brugere 1 11-12-2006 08:29 PM
Opdatering af en fil i en zip-arkiv dbridle AIX 6 09-27-2006 03: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 Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 06-09-2008
mecano mecano is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 4
awk ajourføring en fil med en anden, en sammenligning, ajourføring

Hej,
Jeg har læst og søge gennem dette vidunderlige forum og prøvet forskellige tilgange, men det synes jeg mangler nogle kundskaber og neuroner ^ ^

Her er hvad jeg prøver at opnå:

file1:
test filea 3.495;
test fileb 4.578;
test filec 7.689;
test Filey 9.978;
test filez 12.300;

fil2:
test filea 3.495;
test arkiveret 4.578;
test filec 7.689;
test Filex 8.978;

resultater:
test filea 3.495;
test arkiveret 4.578;
test filec 7.689;
test Filex 8.978;
test Filey 9.978;
test filez 12.300;

sammenligning baseret på sidste felt (feltet $ 3), nye indhold fra fil2 (her nøjes med "nøgle" 8.978 er ny) bør føjes til den endelige produktion og indhold, der er anderledes i fil2 (test arkiveret 4.578; her), skal erstatte fil1 en .

her er der hvor jeg er nu:

awk 'NF (key \u003d $ NF; keys [key] + +) NR \u003d\u003d FNR (key1 [key] \u003d $ NF ORS; rec1 [key] \u003d $ 0 ORS; næste) (key2 [key] \u003d $ NF ORS; rec2 [key] \u003d $ 0 ORS; næste) END (for (k i nøgler) (if (key1 [k] \u003d\u003d key2 [k]) (print rec2 [k]) else (print rec1 [k]))) ' $ fil1 $ fil2> $ file1.updated

til læsbarheden:

awk '
NF
(
key \u003d $ NF;
keys [key] + +
)
NR \u003d\u003d FNR
(
key1 [key] \u003d $ NF ORS;
rec1 [key] \u003d $ 0 ORS;
næste
)
(
key2 [key] \u003d $ NF ORS;
rec2 [key] \u003d $ 0 ORS;
næste
)
SLUT
(
for (k i nøgler)
(
if (key1 [k] \u003d\u003d key2 [k])
(
print rec2 [k]
)
anden
(
print rec1 [k]
)
)
) '
$ fil1 $ fil2> $ file1.updated

men .. dette ikke fungerer godt: /
  #2 (permalink)  
Old 06-09-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
narkoman
  
 

Join Date: Jan 2007
Beliggenhed: Варна, България / Milano, Italia
Indlæg: 2.867
Hvis ordren ikke er vigtig:

(brug nawk eller / usr/xpg4/bin/awk på Solaris)

Code:
awk 'END{for(k in _)print _[k]}{_[$NF]=$0}' file1 file2
Ellers givet dit eksempel:

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

Senest redigeret af radoulov; 06-09-2008 kl 09:39 AM..
  #3 (permalink)  
Old 06-09-2008
mecano mecano is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 4
oh my ....

Thanks a lot!

Jeg troede, at løsningen var noget opbevaring af nøgler fra fil1, gentage dem på fil2, derefter vende iteration for at finde forsvundne journaler ... Jeg var langt væk fra den skønhed awk ...

hvis jeg har forstået det rigtigt, awk læser de to filer og automagisk fusionerede registre sig selv? Det betyder, at der ikke er behov for at opbevare værdier fra fil1 at sammenligne dem med fil2? Beautifull ...

To ting, jeg ikke får: brugen af understregning (mens jeg tror det står for "alle læst poster"?), Og hvorfor er SLUT ikke slutningen?

Om den slags kommando ville det ikke mislykkes på ';'? Vil du vide, hvordan du angiver 'sidste felt' i overensstemmelse med slags? Eller er noget i retning af:
| 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) '
foretrække?

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

Join Date: Jan 2007
Beliggenhed: Варна, България / Milano, Italia
Indlæg: 2.867
Citat:
Oprindeligt Indsendt af mecano View Post
[...]
hvis jeg har forstået det rigtigt, awk læser de to filer og automagisk fusionerede registre sig selv? Det betyder, at der ikke er behov for at opbevare værdier fra fil1 at sammenligne dem med fil2? Beautifull ...
[...]
Det bruger en associativt array (en hash), så den sikrer det unikke
af de vigtigste ($ NF i dette tilfælde), og værdien er altid at den sidste det ser
(den ene i fil2). Det vil knytte til hver nøgle ($ NF) hele record ($ 0), og det vil opdatere den værdi, når den ser den samme nøgle.

Citat:
To ting, jeg ikke får: brugen af understregning (mens jeg tror det står for "alle læst poster"?), Og hvorfor er SLUT ikke slutningen?
Nå, det er kinda skrivemåde,
det du vil have koden mere læsevenlig,
du kan bruge dette i stedet (og dette er foreneligt selv med de gamle plain Solaris awk):

Code:
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
Citat:
Om den slags kommando ville det ikke mislykkes på ';'?
Jeg tror, den slags kommando vil kaste den korrekt. Har du et eksempel, hvor input som denne er ikke sorteret korrekt?

Citat:
Vil du vide, hvordan du angiver 'sidste felt' i overensstemmelse med slags?
Eller er noget i retning af:
| 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) '
foretrække?
Hvorfor? Er det ikke det sidste felt position fast?
I så fald vil jeg gå med:

Code:
perl -lane'
  $h{$F[-1]} = $_;
  print join "\n", map $h{$_}, sort {$a <=> $b} keys %h 
    if eof'
Eller (hvis du virkelig ønsker at slippe af med «,» mens sortering):

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

Code:
read<file;set -- $REPLY;sort -k$#n file
  #5 (permalink)  
Old 06-09-2008
mecano mecano is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 4
Tak for at tage sig tid til at forklare alt dette radoulov ^ ^ That's really great!

Citat:
Jeg tror, den slags kommando vil kaste den korrekt. Har du et eksempel, hvor input som denne er ikke sorteret korrekt?
vel ikke i dette særlige tilfælde, men jeg husker at skulle afklæde den «,» at være i stand til at bruge 'sort-n' korrekt (uden at angive en nøgle, jeg netop ekstrakt sidste felt med awk derefter anvende sort-n til det. En skam 'sort' tillader ikke omvendt nøgle udvælgelse), for eksempel med værdier som:
27.384;
7.384, eller 384;
men jeg prøvet så mange forskellige ting, tror jeg det bør være en fortsat nogle mistypes / fejl på min side eller på grund af Windows linjeafslutninger nogle filer synes at have (nogle filer er oprettet på Windows og nogle på Unix)?

Nr. det sidste felt er ikke fast, fordi jeg er på et bash script værktøj til SQL-forespørgsler filer sortering / ajourføring, denne skal bruges på flere forskellige filer, hvor antallet af områder, er ikke altid den samme, og hvor de centrale værdi kan , sjældent, men der sker, i midten af linjen.
Så i dette tilfælde tager en $ key argumenter fra cli:
awk 'END (for (k i _) udskrive _ [k ]}{_[$'"$ nøglen "']\u003d$ 0)' $ fil1 $ fil2> $ file1.updated
med en tillægstoldsatser betinget af argument '0 'til slutningen af linjen (fordi jeg ikke fik $ nøglen til at slå til NF og awk under' "$ key" ').
Jeg gør det for et lille samfund, og det skal være virkelig simpelt.
Hvis du ikke er bange for at læse awfull kode jeg kan sende det ^ ^
  #6 (permalink)  
Old 06-10-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
narkoman
  
 

Join Date: Jan 2007
Beliggenhed: Варна, България / Milano, Italia
Indlæg: 2.867
Citat:
[...]
Hvis du ikke er bange for at læse awfull kode jeg kan sende det ^ ^
Ja, selvfølgelig efter det.
Du kan få nyttige råd her.
  #7 (permalink)  
Old 09-12-2008
s.rajkumar s.rajkumar is offline
Registreret Bruger
  
 

Join Date: Aug 2008
Stillinger: 1
Hej er meget nyt at awk & unix, mine krav er meget lig dette ..

Jeg vil sammenligne med første kolonne,

file1:
0.000-00.058 | Green
0.000-00.059 | Green
0.000-00.060 | Green
0.402-01.055 | Green
0.402-01.058 | Green
0.402-01.059 | Green
0.402-01.061 | Green
0.402-01.065 | Green



fil2:
0.000-00.057 | Red
0.000-00.058 | Blue
0.000-00.059 | Red
0.000-00.060 | Blue


Mit resultat bør

0.000-00.058 |Blå
0.000-00.059 |Rød
0.000-00.060 |Blå
0.402-01.055 | Green
0.402-01.058 | Green
0.402-01.059 | Green
0.402-01.061 | Green
0.402-01.065 | Green

0.000-00.057 | Red

venter for dit svar ...
Thank u.
Closed Thread

Bogmærker

Tags
Solaris

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 12:01 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0