Mise en forme d'une variable avec un fichier

Bonjour,
Je suis à la recherche d’une façon de générée une variable à partir d’un fichier et de supprimer du fichier ce numéro qui et charger dans la variable je vous laisse le contenu du fichier :

Le fichier toto:
1 18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705

Ce que je veux comme résultat:

Contenu de la variable:
num=1

Le fichier toto après chargement de la variable:
18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705

Merci d’avance pour vos solutions

15 réponses

  1. euh..tu devrais pas plutôt poster dans la section programmation ?
    0
    1. Non je ne pense pas tu n'a pas une petite idée j'aimerai intégrer la solution dans un script shell unix.

      A+
      0
      1. mais si tu postes dans la section unix/linux tu vas t'adresser à des utilisateurs de linux ou unix par forcément des programmeurs , alors que peut être que dans le section programmation même si tu ne t'adresses pas à des "pro" unix/linux peut être que quelqu'un verra des ressemblance avec ce qu'il fait en dev.
        Enfin bon je donnais mon avis ;-)
        0
        1. Merci j'ai posté dans programation aussi .
          0
          1. Modérateur
            Salut,
            lami20j@debserv:~$ cat toto
            1 18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705
            lami20j@debserv:~$ num=$(grep -Eo '(^|\b)1\b' toto);sed -i.orig 's/'$num' //' toto
            lami20j@debserv:~$ cat toto
            18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705
            lami20j@debserv:~$ echo $num
            1
            lami20j@debserv:~$ cat toto.orig
            1 18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705
            lami20j@debserv:~$
            
            
            0
            1. Modérateur
              Salut,

              Moi j'avais ça :
              [tmpfs]$ cat plop
              1 18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705
              
              [tmpfs]$ var="1"
              
              [tmpfs]$ sed "s/\b$var \b//" plop
              18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705
              
              [tmpfs]$ cat plop
              1 18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705
              
              [tmpfs]$ var="1071"
              
              [tmpfs]$ sed "s/\b$var \b//" plop
              1 18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705
              [tmpfs]$
              ;-))
              0
              1. Modérateur
                oui, tu as raison ;-)
                je ne sais pas pourquoi je me suis compliqué avec grep ;-))
                0
              2. Modérateur
                @lami20jA cause de ça sûrement ;-))
                0
            2. Modérateur
              donc
              num=1;sed -i.orig "s/\b$num \b//" toto
              0
              1. Modérateur
                Voui, moi aussi je sais pas pourquoi je suis allé m'embêter avec les "\b", sûrement un reste de l'autre post aussi ;-((

                Merchi à toi ;-))
                0
              2. Modérateur
                @jipicy;-)

                0
            3. Bonjour,

              J'ai fait le test suivant comme indiqué par contre j'ai le message suivant?

              la commande:
              num=$(grep -Eo '(^|\b)1\b' toto);sed -i.orig 's/'$num' //' toto

              grep: illegal option -- E
              grep: illegal option -- o
              Usage: grep -hblcnsviw pattern file . . .
              sed: illegal option -- i
              0
              1. Modérateur
                Re-

                Sous quelle plateforme est-tu ?
                Quelle version de "sed" (sed --version) ?
                0
            4. Comment puis je voir la version du sed?
              Unix sunos 5.8
              0
              1. Modérateur
                Comment puis je voir la version du sed?
                C'est marqué dans mon post précédent !
                sed --version

                Sinon, comme dis précédemment, tu n'as pas besoin de "grep", juste de "sed", comme ci-dessous :
                num=1; sed "s/\b$num \b//" fichier
                Si les chiffres recherchés sont uniques dans le fichier et si la suite de chiffres dans ledit fichier est croissante, tu n'as pas besoin des "\b" dans l'expression :
                num=1; sed "s/$num //" fichier
                :-))
                0
            5. Merci je n'avais pas compris le mécanisme des sed's j'ai fait le test et ca marche a merveille merci beaucoup c’est hyper sympas.

              Bonne journée à tous.
              0
              1. Re-moi je reviens vers vous car j'ai encore un ptit couac je ne sais toujours pas charger la variable automatiquement à partir du fichier qui contient les champs suivants :

                1 18 44 103 164 224 285 345 404 465 524 584 643 704 765 824 884 914 936 975 1035 1071 1131 1191 1252 1312 1372 1433 1493 1553 1613 1673 1733 1793 1853 1913 1972 2033 2092 2152 2212 2272 2287 2304 2366 2388 2410 2439 2463 2523 2584 2645 2705

                J’ai suivi vos conseilles mais dans votre exemple la variable num et chargé apriori manuellement et moi je recherche une astuce pour faire le chargement automatiquement????

                Comment faire?
                Le résultat doit être égal :
                1er passage num=1 <===chargement automatique par une commande que je connais pas pour le moment
                Puis on supprime le 1 du fichier

                2éme passage num=18 en auto
                Puis on supprime le 18 du fichier

                3éme passage num=44 .....etc
                Puis on supprime le 44 du fichier

                Merci d'avance.
                0
                1. Modérateur
                  Re-

                  Le but final c'est quoi ?

                  Parce que si c'est pour passer chaque champ un par un du fichier et les supprimer, autant effacer le fichier, non ?

                  Donc donnes davantage de détails sur la finalité des tenants et des aboutissants...

                  C'est le même fichier ?

                  ;-))
                  0
                  1. Oui c'est toujours le même fichier

                    Non le fichier ne doit pas être effacé d'un coup le but c'est de le faire un par un.

                    j'ai besoin d'une seule information c'est comment charger cette variable?
                    0
                    1. Modérateur
                      #! /bin/bash
                      
                      for i in $(cat fichier)
                      do
                      sed -i "s/$i//" fichier
                      done
                      ;-))
                      0
                      1. Merci beaucoup je test la manip demain.

                        A+

                        bonne soirée.
                        0

                        Discussions similaires

                        question pix mot caché

                        7 réponses