The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Legge til kolonner med to filer chandra321 Shell programmering og Skripting 7 05-06-2009 01:11
Sammenligne lignende kolonner i to forskjellige filer ragavhere Shell programmering og Skripting 13 04-16-2008 09:53
Sammenligne felles kolonner i en tabell i to filer ragavhere Sun Solaris 1 04-11-2008 09:41
Sammenlikning Kolonner av to filer ggopal Shell programmering og Skripting 4 02-21-2007 08:06
Sammenlikning Kolonner av to filer ggopal UNIX for Advanced & ekspertbrukere 1 02-17-2007 04:11

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øk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 06-05-2008
oabdalla oabdalla is offline
Registrert bruker
  
 

Bli Dato: juni 2008
Innlegg: 2
sammenligne filer - legge / trekke / formating kolonner

Jeg har to filer:
file1.txt:
FS Totalt Brukt Gratis Brukte%
/ 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 1500
/ u05 500
/ U10 2500

Jeg ønsker å sammenligne dem med den første kolonnen i hver fil og opprette en utgang fra både som ser ut som følgende:

FS Totalt Brukte + Adj Free-Adj (Brukt + 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%

Vennligst merk at alle linjene fra file1.txt er oppført, og kolonnen "adj" av file2.txt er lagt til kolonnen "Brukt" og trekkes fra kolonnen "Free" av file1.txt bare hvis det er en match.

Jeg var i stand til å produsere denne rapporten først etter at du legger disse inn i en database, men jeg er sikker på at jeg kan gjøre det ved hjelp shell scripting med Deres hjelp.

Takk,
Omer
  #2 (permalink)  
Old 06-05-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
stoffmisbruker
  
 

Bli Date: Jan 2007
Beliggenhet: Варна, България / Milano, Italia
Innlegg: 2879
Du kan bruke omtrent slik:
(bruk nawk eller / usr/xpg4/bin/awk 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
Registrert bruker
  
 

Bli Dato: juni 2008
Innlegg: 2
Takk, radoulov, for rask og elegent script. Det fungerer perfekt.
Alt jeg trenger å gjøre nå, er formatet rapporten pent så det er mer lesbar, men jeg tror jeg kan finne ut av.

Pris på det

Omer
  #4 (permalink)  
Old 06-11-2008
vakharia Mahesh vakharia Mahesh is offline
Registrert bruker
  
 

Bli Date: Feb 2007
Innlegg: 51
Question sammenligne filer osv

Hi Radoulov,
Jeg har lest ditt script. Kan du eloborate for meg for kunnskap. Takk.
  #5 (permalink)  
Old 06-11-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
stoffmisbruker
  
 

Bli Date: Jan 2007
Beliggenhet: Варна, България / Milano, Italia
Innlegg: 2879
Sitat:
Originally Posted by vakharia Mahesh View Post
[...]
Kan du eloborate for meg for kunnskap
Sikkert.

Code:
NR == FNR
Ovennevnte Uttrykket returnerer sann bare under behandlingen de første inndatafilen (fil2). Så, tilsvarende tiltak er:

Code:
{ 
  sub(/,/, "")
  _[$1] = $2 
  next 
  }
Strip tusenskilletegn, fylle ut en assosiativ array _med $ 1 som nøkler, $ 2 som verdier, så får input vil det bli:

Code:
key -> "/u01" value -> 1500
key -> "/u05" value -> 500
key -> "/u10" value -> 2500
Den, det neste statement styrker awk å stoppe behandlingen den nåværende rekorden så ingen nærmere regler / tiltak vil bli henrettet på denne posten. Dette betyr at neste tiltak ikke vil behandle den første inndatafilen.

Code:
FNR == 1
FNR er antall poster som har blitt lest så langt fra dagens inndatafilen (den andre input-filen i dette tilfellet). Så, under behandlingen av første posten i andre 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
  }
Skriv overskriften kolonner og gå til neste posten.

Code:
$1 in _ { 
  $3 += _[$1]
  $4 -= _[$1] 
  $5 = $3/$2*100 
  }
Uttrykket nøkkel i array returnerer sann dersom den indikerte nøkkel finnes i den indikerte array. For de postene du gjøre følgende:
- Legg til verdien _ [$ 1] av tilsvarende tasten $ 1 til den tredje kolonnen
- Subtrahere verdien _ [$ 1] av tilsvarende tasten $ 1 fra fjerde kolonnen
- Beregne verdien av den femte kolonne

Code:
{
  printf "%4s %5d %8d %8d %14d%\n",
  $1, $2, $3, $4, $5
  }
Skriv de nye verdiene.


Håper dette hjelper.
  #6 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Registrert bruker
  
 

Bli Date: Feb 2007
Innlegg: 51
Thumbs up Sammenlikning Filer

Simpelthen! NO WORDSSSSSSSS vil være nok veien til
Explaining. Bunter av TAKK nedenfra AV MINE HEART.Let meg
si å forstå er somthing og å forklare i enkelhet som er mer
cumbersome.Once igjen Enn.
Cheers Dimitri.
  #7 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Registrert bruker
  
 

Bli Date: Feb 2007
Innlegg: 51
Thumbs up Sammenlikning Filer

Akkurat nå har jeg skrevet svaret men appers ikke der,

Kjære Radlouv
Bunter av Takk til dere for å forklare koden i svært enkle sikt.
No way, men simpelthen. Ingen ord får være nok. Kjenne er noe
men for å forklare i enkle wrods krever stor InSite.

Enn igjen. Cheers Up.
Closed Thread

Hugseliste

Tags
solaris

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 01:22.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0