![]() |
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
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: / |
|
||||
|
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 ^ ^ |
|
|||||
|
Citat:
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:
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:
Citat:
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'
Code:
perl -lane'
chop $F[-1] and $h{$F[-1]} = $_;
print join "\n", map $h{$_}, sort {$a <=> $b} keys %h
if eof'
Code:
read<file;set -- $REPLY;sort -k$#n file |
|
||||
|
Tak for at tage sig tid til at forklare alt dette radoulov ^ ^ That's really great!
Citat:
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 ^ ^ |
|
||||
|
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. |
![]() |
| Bogmærker |
| Tags |
| Solaris |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|