The UNIX and Linux Forums  

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
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

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-05-2008
oabdalla oabdalla is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 2
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
  #2 (permalink)  
Old 06-05-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
narkoman
  
 

Join Date: Jan 2007
Beliggenhed: Варна, България / Milano, Italia
Indlæg: 2.926
Du kan bruge noget lignende dette:
(brug nawk eller / usr/xpg4/bin/awk på Solaris)


Code:
awk 'NR == FNR { 
  sub(/,/, "")
  _[$1] = $2 
  next 
  }
FNR == 1 { 
  printf "%4s %5s %8s %8s %14s\n", 
  "FS", "Total", "Used+Adj", "Free-Adj", "(Used+Adj)/Total"
  while (++i < 46) printf "-"
  print ""
  next
  }           
$1 in _ { 
  $3 += _[$1]
  $4 -= _[$1] 
  $5 = $3/$2*100 
  }
{
  printf "%4s %5d %8d %8d %14d%\n",
  $1, $2, $3, $4, $5
  }' file2.txt file1.txt

  #3 (permalink)  
Old 06-06-2008
oabdalla oabdalla is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 2
Tak, radoulov, for din hurtig og elegent script. Det fungerer perfekt.
Alt, hvad jeg skal gøre nu, er formatet rapporten pænt, så det er nemmere at læse, men jeg tror, jeg kan finde ud af.

Påskønne det

Omer
  #4 (permalink)  
Old 06-11-2008
vakharia Mahesh vakharia Mahesh is offline
Registreret Bruger
  
 

Join Date: Feb 2007
Stillinger: 51
Question sammenligning af filer osv.

Hi Radoulov,
Jeg har læst dit script. Kan du eloborate for mig for viden. Tak.
  #5 (permalink)  
Old 06-11-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
narkoman
  
 

Join Date: Jan 2007
Beliggenhed: Варна, България / Milano, Italia
Indlæg: 2.926
Citat:
Oprindeligt Indsendt af vakharia Mahesh View Post
[...]
Kan du eloborate for mig for viden
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.
  #6 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Registreret Bruger
  
 

Join Date: Feb 2007
Stillinger: 51
Thumbs up Sammenlign filer

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.
  #7 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Registreret Bruger
  
 

Join Date: Feb 2007
Stillinger: 51
Thumbs up Sammenlign filer

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.
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 05:43 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