Multiplier fichier vi avec un shell

Résolu
jess75 -  
 jess75 -
Bonjour,
j'ai une liste de chiffres (en colonne) dans un fichier vi.
j'aimerais tous les multiplier et créer ainsi un nouveau fichier.
je pensais le faire grâce à un shell.
Est-ce possible?
j'arrive à copier élément par élément mais pas à multiplier

merci d'avance
Configuration: Linux
Konqueror 3.5

7 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Rien compris ! :-\

    vi c'est un éditeur pas un fichier !!!
    0
    1. jess75
       
      ok ok
      je vais essayer d'être plus claire
      j'ai une colonne rempli de chiffres
      je veux multiplier cette colonne
      est-ce que je peux le faire avec un shell?
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Oui ;-))
    [jp@MDK-2008 trash]$ cat plop
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [jp@MDK-2008 trash]$ while read line; do echo "$line x 2 = $((line * 2))";done < plop
    1 x 2 = 2
    2 x 2 = 4
    3 x 2 = 6
    4 x 2 = 8
    5 x 2 = 10
    6 x 2 = 12
    7 x 2 = 14
    8 x 2 = 16
    9 x 2 = 18
    [jp@MDK-2008 trash]$ 
    ;-))
    0
    1. jess75
       
      merci
      ça marche presque...
      il ne veut pas multiplier mes décimaux dont le séparateur est un point,
      ça marche si ce sont des virgules
      @jess> cat test1
      0.25
      0.375
      0.5
      0.625
      0.75
      @jess> while read line; do echo "$line x 2 = $((line * 2))";done < test1
      ksh: 0.25: unexpected `.'

      par contre

      @jess> while read line; do echo "$line x 2 = $((line * 2))";done < test1
      0,25 x 2 = 50
      0,375 x 2 = 750
      0,5 x 2 = 10
      0,625 x 2 = 1250
      0,75 x 2 = 150


      je vais être obligée de transformer tous les points en virgules?
      0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
     while read line; do echo "$line x 2 = " $(echo "$line * 2" | bc);done < plop
    ;-))
    0
    1. jess75
       
      ça marche impec merci
      mais
      en fait j'ai plusieurs colonne
      A1 0.25 0.375
      A1 0.375 0.25
      A1 0.5 0.5
      A1 0.625 0.625
      A1 0.75 0.75

      ce serait possible d'obtenir quelque chose comme?
      A1 0.50 0.750
      A1 0.750 0.50
      A1 1.0 1.0
      A1 1.250 1.250
      A1 1.50 1.50

      C'est sûrement simple mais je débute....
      0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Oui avec "awk" c'est relativement simple, à part que "awk" ne veut pas de point comme séparateur décimal ;-((

    Voici une solution avec "sed" et "awk" :
    [jp@MDK-2008 trash]$ cat plop
    A1 0.25 0.375
    A1 0.375 0.25
    A1 0.5 0.5
    A1 0.625 0.625
    A1 0.75 0.75
    
    [jp@MDK-2008 trash]$ sed 's/\./,/g' plop |  awk '{ print $1, ($2*2), ($3*2) }' | sed 's/,/\./g'
    A1 0.5 0.75
    A1 0.75 0.5
    A1 1 1
    A1 1.25 1.25
    A1 1.5 1.5
    
    [jp@MDK-2008 trash]$
    ;-))
    0
    1. jess75
       
      je touche à la fin de mon probleme

      j'ai essayé plusieurs fois mais il y a toujours une erreur
      j'ai verifié les espaces etc


      @jess> cat test1
      A1 core 0.25 0.375 0.25
      A1 core 0.375 0.25 0.5
      A1 core 0.5 0.5 0.75
      A1 core 0.625 0.625 0.375
      A1 core 0.75 0.75 0.625
      @jess> sed 's/\./,/g' test1 | awk '{ print $1, print $2, ($3*2), ($4*2) }' | sed 's/,/\./g'
      awk: { print $1, print $2, ($3*2), ($4*2) }
      awk: ^ syntax error


      awk n'accepterait qu'un seul print?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    avec perl ;-)
    lami20j@debian:~/trash$ cat plop
    A1 0.25 0.375
    A1 0.375 0.25
    A1 0.5 0.5
    A1 0.625 0.625
    A1 0.75 0.75
    lami20j@debian:~/trash$ perl -ne '$,=" ";($x,$y,$z)=split /\s+/,$_;print $x,2* $y,2*$z,"\n"' plop
    A1 0.5 0.75
    A1 0.75 0.5
    A1 1 1
    A1 1.25 1.25
    A1 1.5 1.5
    lami20j@debian:~/trash$ perl -ne 's/(.*?)\s+(.*?)\s+(.*)/$1 ." ".2*$2 ." ".2*$3/eg;print' plop
    A1 0.5 0.75
    A1 0.75 0.5
    A1 1 1
    A1 1.25 1.25
    A1 1.5 1.5


    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Un seul print suffit ;-))
    sed 's/\./,/g' test1 | awk '{ print $1, $2, ($3*2), ($4*2) }' | sed 's/,/\./g' 
    PS. Ne l'écoute pas, Perl c'est pour les faignants ;-DDD
    0
  8. jess75
     
    et voila problèmes résolus

    merci beaucoup

    bonne fin de journée
    0