logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 11-11-2020 16:39:58

Denver
Membre
Inscription : 26-10-2020

[Résolu] Script Bash [Résolu]

Bonjour, je suis débutant en script bash et je dois faire ceci:

Écrire un fichier texte de la forme suivante :
nombre1 nombre2
nombre3 nombre4
nombre5 nombre6
... ..

Jusque là, pas de soucis

Là où les choses se complique:
Écrire un script shell Bash et qui fait les opérations suivantes :
•prendre le premier fichier en paramètre
•effectuer l’addition des nombres appartenant à une même ligne
•créer un fichier dans lequel les lignes sont les suivantes :
–nombre1 + nombre2 = somme
–. . .  + . . .  = . . .

Je suis un peu perdu ..
Pouvez-vous m'aider svp ?
Merci big_smile

Dernière modification par Denver (13-11-2020 13:05:08)

Hors ligne

#2 11-11-2020 16:48:22

saitama-san
Membre
Inscription : 28-07-2019

Re : [Résolu] Script Bash [Résolu]

# shebang
fichier_parametre="$1"
...
 



./script.sh ./fichier.txt



après, tu peux utiliser while, cut et les redirections.

Hors ligne

#3 11-11-2020 19:49:21

vv222
Administrateur
Lieu : Bretagne
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : [Résolu] Script Bash [Résolu]

Calculer la somme de deux nombres entiers en Bash :

echo $((2 + 3))

5



La même chose en passant par des variables :

nombre1=2
nombre2=3
echo $((nombre1 + nombre2))

5


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#4 11-11-2020 21:11:19

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : [Résolu] Script Bash [Résolu]

Ça ne répond pas à la question parce que c'est du awk et pas du bash. Mais ça se fait en une ligne avec awk tongue

cat a.txt


1 2 3
8 4 5 6 7
2 3
9
1 1 1 1



awk '{b=$1; s=$1; for (a=2; a <=NF; a++) {b+=$a; s=s"+"$a} print s"="b}' a.txt


1+2+3=6
8+4+5+6+7=30
2+3=5
9=9
1+1+1+1=4

Dernière modification par otyugh (11-11-2020 21:15:00)


virtue_signaling.pngpalestine.png
~1821942.svg

Hors ligne

#5 12-11-2020 00:11:27

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [Résolu] Script Bash [Résolu]

Avec le même fichier "a.txt"

python3 -c "with open('a.txt', 'r') as f: print('\n'.join(['+'.join(l.split(' ')) + '={}'.format(sum(map(int, l.split(' ')))) for l in f.read().split('\n')[:-1]]))"


Bah en python aussi! Et ça reste lisible non? big_smile
Mais c'est trop bien awk! b+=$a c'est de l'entier, s=s"+"$a c'est une chaine, ok.

Sinon,

Je suis un peu perdu ..
Pouvez-vous m'aider svp ?


Ca bloque où?

Si tu veux du bash pur (buildin), c'est plus compliqué mais faisable.
Si tu n'as pas de restriction particulière, tu peux inclure, comme évoqué plus haut,  des outils de manipulation de texte (comme sed ou awk), installés par défaut sous debian.

Bon, t'as déjà un bout de la démarche. Pour commencer, tu peux essayer de faire fonctionner toute ces petites briques séparément : obtenir un paramètre, obtenir le contenu d'un fichier, faire une somme de deux variables, réaliser une boucle, extraire un nombre d'une ligne...

Bon, et comme la syntaxe ça s'invente pas, voici quelques briques supplémentaires:
Pour récupérer les éléments d'une ligne :

~$ echo "12 141" | awk '{print $1}'
12
~$ echo "12 141" | awk '{print $2}'
141

:

Pour parcourir un fichier ligne par ligne :

while read -r ligne; do
    echo $ligne
done < $mon_fichier


Voilà, avec ça, si tes lignes contiennent toujours deux colonnes, tu devrais pouvoir obtenir la somme.
Ensuite, mettre ça en forme sera une formalité ^^
Bref, on te laisse agencer tout ça!

Hors ligne

#6 13-11-2020 13:04:08

Denver
Membre
Inscription : 26-10-2020

Re : [Résolu] Script Bash [Résolu]

Merci pour votre aide smile

Dernière modification par Denver (13-11-2020 19:17:43)

Hors ligne

#7 13-11-2020 13:11:16

valdé
Administrateur
Lieu : Paris
Distrib. : Debian GNU/Linux trixie/sid x86_64
Noyau : 6.6.13-amd64
(G)UI : MATE 1.26.1
Inscription : 04-10-2016

Re : [Résolu] Script Bash [Résolu]

Denver a écrit :

Bonjour, merci à tous d'avoir répondu, finalement j'ai trouver cette solution:


touch resultat_nombre
echo "où se situe votre fichier ?"
read emplacement
cd $emplacement

echo "comment se nomme votre fichier ?"
read fichier

cat $fichier | while read ligne ;
do
      IFS=" " read -r -a array <<< "$ligne"
      new_i=$((array[0]+array[1]))
      echo "${array[0]}+${array[1]}=$new_i" >> resultat_nombre
      echo $new_i
done
 



Merci pour votre aide smile



Vu que tu as trouvé voici une solution :

#!/bin/bash

while read line;do
  set -- $line
  result=$(( $1 + $2 ))
  echo $1 + $2 = $result
done < list.txt



$ cat list.txt
1 2
2 3



$ bash script1.sh list.txt
1 + 2 = 3
2 + 3 = 5


~# Where there is a shell, there is a way.

Hors ligne

#8 13-11-2020 14:15:57

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : [Résolu] Script Bash [Résolu]

Hello
note que tu peux utiliser l'option -p avec read

echo "où se situe votre fichier ?"
read emplacement



devient

read -p 'où se situe votre fichier ?' emplacement


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

Pied de page des forums