CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[bash] aide avec sed et grep

Exidrew
Exidrew
Niveau 38
23 novembre 2019 à 17:51:03

Salut !

J'aurais une question à vous demander.
Je fais un projet en bash et je bloque sur l'utilisation de sed, je dois avec un fichier csv qui est :

1:2:3:=somme(l1c1,l1c3)
4:=[l1c4]:7:=moyenne(l2c1,l2c3)
=+(l1c1,size(l3c3)):=shell(expr 12 + 89):/bin/ls:=/(l3c1,l3c2)

remplacer tous les textes soit entre crochets, soit entre parenthèses par leur valeur (l1c1 = 1 par exemple) (l2c1 = 4)

etc..
Le faire ligne par ligne et pas tout d'un coup comme la l2 dépend de la l1
J'essaye depuis tout à l'heure d'isoler le (l1c1, l1c3) pour ensuite en faire un cut et remplacer par les bonnes valeurs, mais j'y arrive vraiment pas...

Si vous pouviez m'aider ça serait cool ! :ok:

Merci d'avance !

godrik
godrik
Niveau 30
23 novembre 2019 à 17:54:27

je ne comprend pas ce que tu veux.
peux tu donner un exemple.

aussi awk semble plus approprie peut etre.

Exidrew
Exidrew
Niveau 38
23 novembre 2019 à 17:57:24

Merci de ta réponse !

Comme exemple en gros :

la ligne :
1:2:3:=somme(l1c1,l1c3)

deviendrait après mon script :
1:2:3:6

mais avant de s'occuper du somme, j'aimerais savoir isoler le texte entre parenthèses pour qu'il sache que ça soit somme(1,3)

godrik
godrik
Niveau 30
23 novembre 2019 à 18:03:28

Et tu veux pouvoir faire ca avec n'importe quelle valeure de ligne et colone? Ou chaque ligne ne peut referer qu'a une seule ligne en particulier?

Exidrew
Exidrew
Niveau 38
23 novembre 2019 à 18:07:48

Oui, nimporte quelle valeure de ligne et colone, mais en gros le script traite ligne par ligne pour avancer un exemple un peu plus complet :

en entrée :
1:2:3:=somme(l1c1,l1c3)
4:=[l1c4]:7:=moyenne(l2c1,l2c3)
=+(l1c1,size(l3c3)):=shell(expr 12 + 89):/bin/ls:=/(l3c1,l3c2)

en sortie on aura :
1:2:3:6
4:6:7:5.66666666666666666666
67669:101:/bin/ls:669.99009900990099009900

je bloque depuis tout à l'heure je deviens fou aha

godrik
godrik
Niveau 30
23 novembre 2019 à 19:00:40

Je ne pense pas que tu va pouvoir faire ca facilement avec bash et sed. Potentiellement ton format peut avoir besoin de valeure qui apparaissent plus tard dans le tableau, ou qui pourrait apparaitre il y a 200 lignes.
Donc la seule solution possible est de stocker le dataset en entier en memoire et quand tu as des formules de former le graphe de dependance pour le resoudre.
Perso j'ecrirai ca dans un langage qui a un support decent de tableau et de structure de donnee. Et ca ne ressemble ni a bash, ni a sed. Personellement, j'ecrirais ca en python.

Exidrew
Exidrew
Niveau 38
23 novembre 2019 à 19:09:44

Le problème, c'est que c'est un projet de cours à rendre en bash :(
Je suis pas du tout fan du bash, sinon en projet perso, je ferais ça en python avec joie aha

godrik
godrik
Niveau 30
23 novembre 2019 à 20:20:16

Alors lis le fichier et stocke les valeures dans un tableau 2D en bash. C'est possible avec un tableau associatif. Regarde la syntaxe la. https://stackoverflow.com/questions/16487258/how-to-declare-2d-array-in-bash

Et fait plusieurs passe pour remplir les valeures que tu ne connais pas.

Exidrew
Exidrew
Niveau 38
24 novembre 2019 à 13:56:10

Merci, pour le moment, toutes mes cellules de chaques lignes sont dans le tableau.
Je vais essayer de les manipuler pour leur donner leur valeur finale et retourner un fichier texte resultat avec comme echo chaque cellule des lignes.

Merci à toi :)

Message édité le 24 novembre 2019 à 13:56:25 par Exidrew
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware