Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] Script bash

4 réponses
Avatar
Tahar
--0-1751251924-1176216861=:19894
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

bonjour à tous,

je voudrais solliciter votre aide pour l'écriture d'un script, permettant de réorganiser un fichier organisé en tableau genre /etc/passwd

voilà grâce à un premier script j'ai obtenu un fichier organisé comme suit :

-rwxrwxr-x 1 wwwrun www 14K Jan 18 17:21 ./ae/aetech-solutions.com/a./a.boughezala/userdb
-rwxrwxr-x 1 wwwrun www 14K Jan 31 08:09 ./ae/aetech-solutions.com/c./c.amri/userdb
-rwxrwxr-x 1 wwwrun www 14K Jan 30 17:59 ./ae/aetech-solutions.com/d./d.chabbah/userdb
-rwxrwxr-x 1 wwwrun www 14K Jan 23 15:56 ./ae/aetech-solutions.com/da/dap/userdb
-rwxrwxr-x 1 wwwrun www 16K Jan 31 08:12 ./ae/aetech-solutions.com/dc/dc1/userdb
-rwxrwxr-x 1 wwwrun www 14K Jan 18 17:22 ./ae/aetech-solutions.com/m./m.boumaiza/userdb

sachant que le séparateur étant le /, le troisième champs représente mes domaines et le 5ème les logins, je voudrais avoir un résultat dans un autre fichiers du genre login@domaine,

pour cela j'ai fait le script suivant

#!/bin/bash

while read line
do
domaine=$(cut -d/ -f3)
login=$(cut -d/ -f5)
echo "$login@$domaine" >> mail_complet
done < resultat_final



or ça ne marche pas, j'obtiens uniquement les domaines, je peux obtenir les logins et les domaines si je fais deux bocles séparées, et je mets chacun dans deux fichiers intermédiaires, mais comment les recoller par la suite pour obtenir le résultat escompté ?


merci de m'éclaire de vos lumières :)

@+

--0-1751251924-1176216861=:19894
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

bonjour à tous,<br><br>je voudrais solliciter votre aide pour l'écriture d'un script, permettant de réorganiser un fichier organisé en tableau genre /etc/passwd<br><br>voilà grâce à un premier script j'ai obtenu un fichier organisé comme suit :<br><br>-rwxrwxr-x&nbsp; 1 wwwrun www 14K Jan 18 17:21 ./ae/aetech-solutions.com/a./a.boughezala/userdb<br>-rwxrwxr-x&nbsp; 1 wwwrun www 14K Jan 31 08:09 ./ae/aetech-solutions.com/c./c.amri/userdb<br>-rwxrwxr-x&nbsp; 1 wwwrun www 14K Jan 30 17:59 ./ae/aetech-solutions.com/d./d.chabbah/userdb<br>-rwxrwxr-x&nbsp; 1 wwwrun www 14K Jan 23 15:56 ./ae/aetech-solutions.com/da/dap/userdb<br>-rwxrwxr-x&nbsp; 1 wwwrun www 16K Jan 31 08:12 ./ae/aetech-solutions.com/dc/dc1/userdb<br>-rwxrwxr-x&nbsp; 1 wwwrun www 14K Jan 18 17:22 ./ae/aetech-solutions.com/m./m.boumaiza/userdb<br><br>sachant que le séparateur étant le /, le troisième champs représente mes domaines et le 5ème les logins, je voudrais avoir un résultat dans un autre fichiers du genre
login@domaine,<br><br>pour cela j'ai fait le script suivant <br><br>#!/bin/bash<br><br>while read line<br>do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; domaine=$(cut -d/ -f3)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; login=$(cut -d/ -f5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "$login@$domaine" &gt;&gt; mail_complet<br>done &lt; resultat_final<br><br><br><br>or ça ne marche pas, j'obtiens uniquement les domaines, je peux obtenir les logins et les domaines si je fais deux bocles séparées, et je mets chacun dans deux fichiers intermédiaires, mais comment les recoller par la suite pour obtenir le résultat escompté ?<br><br><br>merci de m'éclaire de vos lumières :)<br><br>@+<br>
--0-1751251924-1176216861=:19894--


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

4 réponses

Avatar
Jacques L'helgoualc'h
Tahar a écrit, mardi 10 avril 2007, à 16:54 :
bonjour à tous,



bonjour,

[...] sachant que le séparateur étant le /, le troisième champs
représente mes domaines et le 5ème les logins, je voudrais avoir un
résultat dans un autre fichiers du genre ,



Awk est tout indiqué quand on dispose de séparateurs fiables :

awk -F/ '$NF>=5{print $5"@"$3}' <resultat_final >mail_complet


#!/bin/bash

while read line
do
domaine=$(cut -d/ -f3)
login=$(cut -d/ -f5)
echo "$login@$domaine" >> mail_complet
done < resultat_final

or ça ne marche pas, j'obtiens uniquement les domaines,



C'est le premier cut qui bouffe toute l'entrée standard...
--
Jacques L'helgoualc'h


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Émile CARRY
Le Tue, 10 Apr 2007 16:54:21 +0200 (CEST),
Tahar a écrit :

bonjour à tous,


Bonjour,


or ça ne marche pas, j'obtiens uniquement les domaines, je peux
obtenir les logins et les domaines si je fais deux bocles séparées,
et je mets chacun dans deux fichiers intermédiaires, mais comment les
recoller par la suite pour obtenir le résultat escompté ?


merci de m'éclaire de vos lumières :)


Je dirais que bash n'est peut-être pas le bon outil, c'est typiquement
le cas où "awk" fait des miracles...
Par exemple, en supposant que le fichier issue de ton premier script
s'appelle "test" :
awk -F "/" '{print $5"@"$3}' test > mails.txt

et tu auras ta liste de mails...

mil
--
Nous vivons a une époque ou le superflu est notre seule nécessite.
-+- Oscar Wilde -+-
Avatar
Yves Rutschle
On Tue, Apr 10, 2007 at 04:54:21PM +0200, Tahar wrote:
#!/bin/bash

while read line
do
domaine=$(cut -d/ -f3)
login=$(cut -d/ -f5)
echo "$login@$domaine" >> mail_complet
done < resultat_final



Attention, les 'cut' travaillent directement sur l' entrée
de la boucle, au lieu de travailler sur $line.

Essaie plutôt:
domaine=`echo $line | cut -d/ -f3`
login=`echo $line | cut -d/ -f5`

Sinon, une méthode qui sera sans doute plus courte et
efficace est d'utiliser sed, en remplaçant la ligne complète
par des bouts, réordonnés:

find . -name userdb | sed s/^.*/(.*)/.*/(.*)/userdb$//

J'ai pas dis plus facile à lire ;)

Y.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Yves Rutschle a écrit, mardi 10 avril 2007, à 17:18 :
[...]
Essaie plutôt:
domaine=`echo $line | cut -d/ -f3`
login=`echo $line | cut -d/ -f5`



Le shell (ba)?sh sait faire ça tout seul...

Sinon, une méthode qui sera sans doute plus courte et
efficace est d'utiliser sed, en remplaçant la ligne complète
par des bouts, réordonnés:

find . -name userdb | sed s/^.*/(.*)/.*/(.*)/userdb$//

J'ai pas dis plus facile à lire ;)



Tu abuses de l'obfusquitude :) --- et il faut protéger ta commande...

GNUSed :

sed -nre 's,^.*/([^/]+)/[^/]+/([^/]+)/userdb$,,p'

--
Jacques L'helgoualc'h


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact