The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
l'autorisation de changer en utilisant FTP panknil De programmation et de script Shell 3 11-07-2007 08:08 PM
Changement de nom d'utilisateur et de l'évolution de groupe et GID deal732 De programmation et de script Shell 2 04-18-2007 11:09 AM
Modification de l'ordre en utilisant sed venu_nbk UNIX pour les nuls Questions et réponses 9 07-29-2006 06:03 PM
Modification des utilisateurs Bab00shka De programmation et de script Shell 2 08-01-2003 05:44 AM
Changer IP Hordak UNIX pour les nuls Questions et réponses 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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Registered User
  
 

Join Date: Sep 2008
Posts: 36
Unhappy awk est en train de changer mon FS!

Bonjour là,

Voici (une partie) du fichier que je souhaite changer. Note les trois espaces avant le "3" (qui peut être "2" ou "0" également).


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

Je veux trouver un ID (par exemple 621530) et modifiez la valeur suit.

J'utilise ce script:

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

Le problème est qu'il supprime les trois places en face de la ligne si elle change quelque chose dans la ligne ... la suppression de la ligne des commentaires qui résout le problème.
Cependant, je ne sais pas comment conserver le même nombre d'espaces entre les lignes: 2 espaces entre le code et la valeur suivante, et 1 espace compris entre une valeur et d'identité, après que (le script ci-dessus transforme tout en un seul espace).

Est ce que quelqu'un peut m'aider?
  #2 (permalink)  
Old 10-04-2008
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Modérateur (Le Tuteur)
  
 

Date d'inscription: juin 2008
Lieu: INDE
Posts: 1407
ensemble OFS \u003d "" pas du tout les espaces que vous voulez
  #3 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Registered User
  
 

Join Date: Sep 2008
Posts: 36
J'ai déjà essayé ...
Le problème est donc que toutes mes colonnes sont espacées avec un seul espace!

Je veux conserver la structure:

Code:
 
"   "3" "xxxxxx"  "x.xxxxExx" "xxxxxx"  "x.xxxxExx"...

  #4 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Registered User
  
 

Join Date: Sep 2008
Posts: 36
Thumbs up

Pour l'instant, la seule solution que j'ai est:


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

En effet, pour quelques lignes, certaines valeurs n'ont pas le format "x.xxxxExxx", mais moins de caractères (par exemple, "0.0"). Ensuite, les caractères manquants sont des "espaces" pour garder l'alignement:


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

Ma solution fonctionne aussi longtemps que je ne suis pas l'évolution des valeurs situées sur les lignes avec "réduit en" caractères ... (tant que rien n'est changé dans la ligne, awk n'est pas re-concaténer la ligne, donc le droit de conserver l'espacement).

Aussi, en utilisant tous les arguments d'impression n'est pas facile ...

Comment pourrais-je résoudre ces deux problèmes?
  #5 (permalink)  
Old 10-04-2008
Franklin52 Franklin52 is offline Forum Staff  
Modérateur
  
 

Join Date: Feb 2007
Posts: 4,333
Vous pouvez utiliser printf pour imprimer la ligne avec un format fixe, quelque chose comme:


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

Observe
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 11:23 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0