The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Aggiunta di due file di colonne chandra321 Shell scripting e di programmazione 7 05-06-2009 12:11 PM
Confronto colonne simili in due file diversi ragavhere Shell scripting e di programmazione 13 04-16-2008 08:53 AM
Confrontando il comune colonne di una tabella in due file ragavhere SUN Solaris 1 04-11-2008 08:41 AM
Confrontare due file di colonne ggopal Shell scripting e di programmazione 4 02-21-2007 08:06 PM
Confrontare due file di colonne ggopal UNIX e avanzata per utenti esperti 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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 06-05-2008
oabdalla oabdalla is offline
Utente Registrato
  
 

Iscriviti Data: giugno 2008
Interventi: 2
Confrontando i file - aggiungendo / sottraendo / formating colonne

Ho due file:
file1.txt:
Totale FS Usato Usato gratuito%
/ 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

Vorrei confrontare utilizzando la prima colonna in ogni file e creare un output di entrambi che assomiglia al seguente:

Totale FS Usato + Adj Free-Adj (Usato + Adj) / Totale
--------- --------- --------- --------- --------
/ 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%

Si prega di notare che tutte le linee da file1.txt sono elencati, e colonna "adj" di file2.txt è aggiunta la colonna "Usato" e sottrarla dalla colonna "gratuito" di file1.txt solo se vi è una corrispondenza.

Sono stato in grado di produrre questa relazione solo dopo il caricamento di questi file in un database, ma sono sicuro che posso fare con lo shell scripting con il vostro aiuto.

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

Iscriviti Data: gennaio 2007
Ubicazione: Варна, България / Milano, Italia
Interventi: 2.860
Si può usare qualcosa di simile a questo:
(uso nawk / o usr/xpg4/bin/awk su Solaris)

Codice:
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
Utente Registrato
  
 

Iscriviti Data: giugno 2008
Interventi: 2
Grazie, radoulov, per il suo rapido e elegante script. E 'perfettamente funzionante.
Tutto quello che occorre fare ora è formato il rapporto è quindi ben più leggibile, ma credo di poter cifra che fuori.

Apprezzare

Omer
  #4 (permalink)  
Old 06-11-2008
vakharia Mahesh vakharia Mahesh is offline
Utente Registrato
  
 

Iscriviti Data: febbraio 2007
Interventi: 51
Question Confrontando i file etc

Hi Radoulov,
Ho letto il vostro script. Potete eloborate per me, per la conoscenza. Grazie.
  #5 (permalink)  
Old 06-11-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
addict
  
 

Iscriviti Data: gennaio 2007
Ubicazione: Варна, България / Milano, Italia
Interventi: 2.860
Citazione:
Originalmente inviato da vakharia Mahesh View Post
[...]
Potete eloborate per me per la conoscenza
Sicuro.

Codice:
NR == FNR
La suddetta espressione restituisce true solo durante l'elaborazione del primo file di input (file2). Quindi, le corrispondenti azioni sono:

Codice:
{ 
  sub(/,/, "")
  _[$1] = $2 
  next 
  }
Striscia il separatore delle migliaia, popolano un array associativo _con $ 1 come chiavi, $ 2 come valori, in modo determinato l'ingresso sarà:

Codice:
key -> "/u01" value -> 1500
key -> "/u05" value -> 500
key -> "/u10" value -> 2500
Il successivo dichiarazione forze awk per interrompere il trattamento dei record corrente in modo ulteriori norme / azioni saranno eseguiti per questa registrazione. Ciò significa che le prossime azioni non il primo processo di file di input.

Codice:
FNR == 1
FNR è il numero di record che sono stati letti finora dagli attuali file di input (il secondo file di input in questo caso). Così, durante l'elaborazione della prima registrazione del secondo file di input:

Codice:
{ 
  printf "%4s %5s %8s %8s %14s\n", 
  "FS", "Total", "Used+Adj", "Free-Adj", "(Used+Adj)/Total"
  while (++i < 46) printf "-"
  print ""
  next
  }
Stampa l'intestazione delle colonne e passare alla successivo record.

Codice:
$1 in _ { 
  $3 += _[$1]
  $4 -= _[$1] 
  $5 = $3/$2*100 
  }
L'espressione chiave in array restituisce true se l'indicazione chiave esiste nel indicato array. Per le registrazioni effettuare le seguenti operazioni:
- Aggiungere il valore _ [$ 1] della corrispondente chiave $ 1 la terza colonna
- Sottrarre il valore _ [$ 1] della corrispondente chiave $ 1 dalla quarta colonna
- Calcolare il valore della quinta colonna

Codice:
{
  printf "%4s %5d %8d %8d %14d%\n",
  $1, $2, $3, $4, $5
  }
Stampa, i nuovi valori.


Hope this helps.
  #6 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Utente Registrato
  
 

Iscriviti Data: febbraio 2007
Interventi: 51
Thumbs up Confrontare file

Simply superb! NO WORDSSSSSSSS sarà sufficiente il vostro modo di
SPIEGARE. GRAZIE DI MAZZI DA FONDO DEL MIO HEART.Let me
dire somthing è di capire e di spiegare nella semplicità che è più
cumbersome.Once Grazie di nuovo.
Cheers Dimitri.
  #7 (permalink)  
Old 06-12-2008
vakharia Mahesh vakharia Mahesh is offline
Utente Registrato
  
 

Iscriviti Data: febbraio 2007
Interventi: 51
Thumbs up Confrontare file

Poco fa ho scritto la risposta, ma non dove appers,

Cari Radlouv
I pacchi di Grazie a voi per illustrare il codice in maniera molto semplice termine.
Alcun modo, ma semplicemente SUPERB. N. parola è sufficiente. Conoscere è qualcosa
ma per spiegare in modo semplice wrods richiede grande InSite.

Grazie ancora una volta. Cheers Up.
Closed Thread

Segnalibri

Tag
solaris

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 12:02 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0