![]() |
|
|
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 |
| Tilføjelse af kolonner i to filer | chandra321 | Shell Programmering og Scripting | 7 | 05-06-2009 01:11 PM |
| Sammenlign lignende kolonner i to forskellige filer | ragavhere | Shell Programmering og Scripting | 13 | 04-16-2008 09:53 AM |
| Sammenligning af den fælles kolonner i en tabel i to filer | ragavhere | Sun Solaris | 1 | 04-11-2008 09:41 AM |
| Sammenligne kolonner i to filer | ggopal | Shell Programmering og Scripting | 4 | 02-21-2007 08:06 PM |
| Sammenligne kolonner i to filer | ggopal | UNIX for Advanced & Ekspertsøgning Brugere | 1 | 02-17-2007 04:11 AM |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
sammenligne filer - tilføjelse / subtraktion / formatering kolonner
Jeg har to filer:
file1.txt: FS alt Brugte Gratis Brugte% / U01 10000 8000 2000 80% / u02 10000 8000 2000 80% / u03 10000 8000 2000 80% / u04 10000 8000 2000 80% / u05 10000 8000 2000 80% / u06 10000 8000 2000 80% / u07 10000 8000 2000 80% / U10 10000 5000 5000 50% file2.txt: FS Adj / U01 1.500 / u05 500 / U10 2.500 Jeg vil gerne sammenligne dem ved hjælp af den første kolonne i hver fil og oprette et output fra både, som ligner følgende: FS Brugt i alt + Adj Free-Adj (Brugt + Adj) / Total --------- -------- --------- --------- --------- / U01 10.000 9.500 500 95% / u02 10.000 8.000 2.000 80% / u03 10.000 8.000 2.000 80% / u04 10.000 8.000 2.000 80% / u05 10.000 8.500 1.500 85% / u06 10.000 8.000 2.000 80% / u07 10.000 7.500 2.500 75% Bemærk venligst at alle linier fra file1.txt er opført, og kolonnen "adj" af file2.txt tilføjes Brugte kolonne "og trækkes fra kolonnen" Free "af file1.txt kun hvis der er et match. Jeg var i stand til at producere denne rapport kun efter læsning af disse filer i en database, men jeg er sikker på, jeg kan gøre det ved hjælp af skalscripter med din hjælp. Tak, Omer |
|
|||||
|
Sikker. Code:
NR == FNR Ovenstående udtryk returnerer true kun under behandling af den første input-fil (fil2). Så de tilsvarende aktioner er: Code:
{
sub(/,/, "")
_[$1] = $2
next
}
Strip tusindtalsseparator, udfylde en associativt array _med $ 1 som nøgler, $ 2 som værdier, så i betragtning af de oplysninger, som den vil være: Code:
key -> "/u01" value -> 1500 key -> "/u05" value -> 500 key -> "/u10" value -> 2500 Den næste erklæring styrker awk at stoppe behandlingen den aktuelle post, så ingen yderligere regler / aktioner vil blive henrettet til denne post. Det betyder, at de næste tiltag ikke vil behandle de første input-filen. Code:
FNR == 1 FNR er det antal poster, der er blevet læst så langt fra den aktuelle input fil (den anden input-filen i dette tilfælde). Så mens behandlingen den første post i den anden input-filen: Code:
{
printf "%4s %5s %8s %8s %14s\n",
"FS", "Total", "Used+Adj", "Free-Adj", "(Used+Adj)/Total"
while (++i < 46) printf "-"
print ""
next
}
Udskriv header kolonner og gå til næste record. Code:
$1 in _ {
$3 += _[$1]
$4 -= _[$1]
$5 = $3/$2*100
}
Udtrykket nøgle i array returnerer sand, hvis den angivne nøgle findes i den angivne array. For de poster du gøre følgende: - Tilføje værdi _ [$ 1] af den tilsvarende tast $ 1 til den tredje kolonne - Trække værdien _ [$ 1] af den tilsvarende tast $ 1 fra fjerde kolonne - Beregne værdien af femte kolonne Code:
{
printf "%4s %5d %8d %8d %14d%\n",
$1, $2, $3, $4, $5
}
Print de nye værdier. Hope this helps. |
|
||||
|
SIMPLY SUPERB! NEJ WORDSSSSSSSS tilstrækkeligt din måde at
FORKLARER. Bundter af tak fra bunden af mit HEART.Let mig sige at forstå, er somthing og at forklare i enkelhed, som er mere cumbersome.Once igen Thanx. Cheers Dimitri. |
|
||||
|
Lige nu har jeg skrevet et svar, men appers ikke hvor,
Kære Radlouv Bundter af Tak til jer for at forklare koden i meget enkle sigt. Ingen måde, men simpelthen superb. Ikke et ord vil være tilstrækkeligt. Viden er noget men for at forklare i simple wrods kræver stor InSite. Thanx igen. Cheers Up. |
![]() |
| Bogmærker |
| Tags |
| Solaris |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|