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
A voir également:

7 réponses

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

Rien compris ! :-\

vi c'est un éditeur pas un fichier !!!
0
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
 while read line; do echo "$line x 2 = " $(echo "$line * 2" | bc);done < plop
;-))
0
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
jess75
 
et voila problèmes résolus

merci beaucoup

bonne fin de journée
0