The UNIX and Linux Forums  

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
Il cambio di permessi tramite FTP panknil Shell scripting e di programmazione 3 11-07-2007 08:08 PM
Cambiare userID e Modifica gruppo e GID deal732 Shell scripting e di programmazione 2 04-18-2007 11:09 AM
Cambiare l'ordine utilizzando sed venu_nbk UNIX for Dummies Domande & Risposte 9 07-29-2006 06:03 PM
Cambiare utenti Bab00shka Shell scripting e di programmazione 2 08-01-2003 05:44 AM
Cambiare IP Hordak UNIX for Dummies Domande & Risposte 2 08-03-2002 01:42 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 10-04-2008
jolecanard jolecanard is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 36
Unhappy awk FS sta cambiando il mio!

Ciao là,

Qui è (una parte) del file che voglio cambiare. Nota le tre spazi prima della "3" (potrebbe essere "2" o "0" anche).

Codice:
   3 621530  1.1935E-02 631530  1.1293E+01 641530  1.1117E-02 571540  4.4419E-14
   3 581540  2.6670E-10 591540  3.8610E-09 601540  1.1016E-06 611540  3.2618E-06
   3 611541  6.5572E-07 621540  9.8307E+00 631540  3.1177E+00 641540  1.4615E+00
   3 571550  0.0000E+00 581550  8.8139E-12 591550  1.0739E-09 601550  2.5639E-07
   3 611550  1.1011E-06 621550  3.6787E-05 631550  3.4821E+00 641550  3.1855E+00
   3 641551  0.0000E+00 581560  9.4585E-13 591560  7.5358E-11 601560  1.2023E-07
   3 611560  1.7968E-07 621560  5.4237E-04 631560  3.0054E-02 641560  6.5687E+00
   3 581570  2.3926E-14 591570  9.9322E-12 601570  4.3929E-09 611570  4.6793E-07
   3 621570  5.5911E-06 631570  6.3564E-04 641570  3.2355E+00 591580  2.8608E-13
Voglio trovare un ID (ad esempio 621530) e cambiare il valore successivo.

Sto usando questo script:
Codice:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{}
NR==FNR{a[$0]=$0; next}
{for(i=2;i<9;i+=2)if($i in a){$(i+1)=var}}
#{$1="   "$1}
{print}' ID_to_be_changed my_file
Il problema è che rimuove i tre spazi di fronte alla fila se si cambia qualcosa nella riga ... di rimuovere la linea commentato risolve il problema.
Tuttavia non so come mantenere lo stesso numero di spazi tra le righe: 2 spazi tra l'ID e il valore seguente, e 1 spazio tra un valore e l'ID dopo che (lo script di cui sopra si trasforma tutto in un unico spazio).

Qualcuno può aiutarmi?
  #2 (permalink)  
Old 10-04-2008
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Moderatore (tutor)
  
 

Iscriviti Data: giugno 2008
Ubicazione: INDIA
Messaggi: 1.400
impostare OFS \u003d "" qualsiasi numero di spazi che si desidera
  #3 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 36
Ho già provato che ...
Il problema quindi è che tutte le mie colonne sono distanziati con un solo spazio!

Voglio conservare la struttura:
Codice:
 
"   "3" "xxxxxx"  "x.xxxxExx" "xxxxxx"  "x.xxxxExx"...
  #4 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2008
Interventi: 36
Thumbs up

Per ora, l'unica soluzione che ho è il seguente:

Codice:
 
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" "}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){print "  ",$1,$2," "$3,$4," "$5,$6," "$7,$8," "$9;next}}
{print}' ID_to_be_changed my_file
In realtà per poche righe, alcuni valori non sono il formato "x.xxxxExxx", ma meno di caratteri (ad esempio, "0,0"). Quindi, la mancanza caratteri sono "spazi", al fine di mantenere l'allineamento:

Codice:
   2 982520  1.6134E-14 982530  1.7241E-17 982540  3.4164E-20 982550  1.2285E-24
   2 992530  1.8708E-17 992541  6.2076E-22 992540  7.5646E-20 992550  7.0917E-22
   2 162500  7.6697E-08      0  0.0000E+00      0  0.0000E+00      0  0.0000E+00
   3  10030  2.0892E-01  30060  6.0786E-04  30070  1.3046E-05  40090  1.9438E-05
   3  40100  1.1748E-04  60140  1.6964E-05 280660  0.0000E+00 290660  1.4066E-14
   3 300660  5.0403E-09 290670  7.6644E-19 300670  2.4718E-10 300680  1.1002E-12
La mia soluzione funziona finché non mi trova sul cambiamento dei valori le righe con "ridotto" caratteri ... (fintanto che non è cambiato nella riga, awk non ri-concatenare la fila, in modo da conservare il diritto di spaziatura).

Inoltre, utilizzando tutti gli argomenti in stampa non è conveniente ...

Come posso risolvere questi due problemi?
  #5 (permalink)  
Old 10-04-2008
Franklin52 Franklin52 is online now Forum Staff  
Moderatore
  
 

Iscriviti Data: febbraio 2007
Messaggi: 4.319
È possibile utilizzare printf per stampare la riga con un formato fisso, qualcosa come:

Codice:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" ";fmt="%5s%7s%12s%7s%12s%7s%12s%7s%12s\n"}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){printf(fmt,$1,$2,$3,$4,$5,$6,$7,$8,$9);next}}
{print}' ID_to_be_changed my_file
Saluti
Closed Thread

Segnalibri

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 è 09:35 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