Problème script bash de nettoyage fichier
willy
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'essaye de créer un script en bash qui me permettra de nettoyer un fichier de log. Je m'explique, soit à considérer comme exemple que j'ai un fichier de log avec les lignes suivantes:
omega.contacts.msn.com TATA
12photos-665.ll.facebook.com TXT
a545.ac-images.myspacecdn.com A
76echo.edge.messenger.live.com HINFO
Le but de mon script est de récupérer les FQDN et de les ranger dans une variable var1 et de récupérer les types DNS dans un 2ème temps et les ranger dans var2 mais je suis confronté à un gros problème.
exemple du script:
#!/bin/bash
for line in 'cat $1'
do
echo "$line"
var1=${line%' '*}
var2=${line#*' '}
done
ce dernier ne m'affiche pas les lignes ci dessus comme ca devrait l'être en raison de l'espace qui sépare les 2 champs SVP quelqu'un aurait une solution à mon problème? ça marche parfaitement avec les ":" mais avec l'espace çà déconne. Je suis coincé Merci!!!
J'essaye de créer un script en bash qui me permettra de nettoyer un fichier de log. Je m'explique, soit à considérer comme exemple que j'ai un fichier de log avec les lignes suivantes:
omega.contacts.msn.com TATA
12photos-665.ll.facebook.com TXT
a545.ac-images.myspacecdn.com A
76echo.edge.messenger.live.com HINFO
Le but de mon script est de récupérer les FQDN et de les ranger dans une variable var1 et de récupérer les types DNS dans un 2ème temps et les ranger dans var2 mais je suis confronté à un gros problème.
exemple du script:
#!/bin/bash
for line in 'cat $1'
do
echo "$line"
var1=${line%' '*}
var2=${line#*' '}
done
ce dernier ne m'affiche pas les lignes ci dessus comme ca devrait l'être en raison de l'espace qui sépare les 2 champs SVP quelqu'un aurait une solution à mon problème? ça marche parfaitement avec les ":" mais avec l'espace çà déconne. Je suis coincé Merci!!!
A voir également:
- Problème script bash de nettoyage fichier
- Fichier bin - Guide
- Nettoyage pc lent - Guide
- Fichier epub - Guide
- Nettoyage mac - Guide
- Nettoyage de disque - Guide
3 réponses
while read fqdn dns; do echo "fqdn = $fqdn -- dns = $dns"; done < fichieron ne lit pas un fichier autrement.
Tu ajoutes une complexité à un faux-problème, qui n'existe qu'à cause de ton obstination à faire les choses de travers.
Salut,
Tu as oublié le guillemets à la fin et voir aussi un exemple avec awk (comme quoi on peut lire le fichier autrement si on veut et il y en a encore pleins des manières de le faire)
D'ailleurs la lecture d'un fichier dépends aussi de sa structure.
En tout cas je préfère un obstiné qu'un qui demande de faire les choses à sa place. ;-)
Tu as oublié le guillemets à la fin et voir aussi un exemple avec awk (comme quoi on peut lire le fichier autrement si on veut et il y en a encore pleins des manières de le faire)
D'ailleurs la lecture d'un fichier dépends aussi de sa structure.
En tout cas je préfère un obstiné qu'un qui demande de faire les choses à sa place. ;-)
lami20j@debian-acer:~$ cat plop
omega.contacts.msn.com TATA
12photos-665.ll.facebook.com TXT
a545.ac-images.myspacecdn.com A
76echo.edge.messenger.live.com HINFO
lami20j@debian-acer:~$ while read fqdn dns; do echo "fqdn = $fqdn -- dns = $dns"; done < plop
fqdn = omega.contacts.msn.com -- dns = TATA
fqdn = 12photos-665.ll.facebook.com -- dns = TXT
fqdn = a545.ac-images.myspacecdn.com -- dns = A
fqdn = 76echo.edge.messenger.live.com -- dns = HINFO
lami20j@debian-acer:~$ awk '{print "fqdn = " $1 " -- dns = " $2}' plop
fqdn = omega.contacts.msn.com -- dns = TATA
fqdn = 12photos-665.ll.facebook.com -- dns = TXT
fqdn = a545.ac-images.myspacecdn.com -- dns = A
fqdn = 76echo.edge.messenger.live.com -- dns = HINFO
lami20j@debian-acer:~$
Re,
mais en n'utilisant que des commandes shell, il n'y a pas 36 solutions correctes.
En revanche il y en à sûrement d'autres manières pour le dire ;-)
Et puis on est là pour proposer notre aide pas pour l'imposer ;-))
Toutefois je t'invite de lire ça
mais en n'utilisant que des commandes shell, il n'y a pas 36 solutions correctes.
En revanche il y en à sûrement d'autres manières pour le dire ;-)
Et puis on est là pour proposer notre aide pas pour l'imposer ;-))
Toutefois je t'invite de lire ça
«Si la boucle "while" reste la méthode la plus simple, elle a toutefois un inconvénient majeur, à savoir qu'elle annihile le formatage des lignes et notamment les espaces et tabulations»
ce que dit jipicy n'est pas totalement vrai :
ce que dit jipicy n'est pas totalement vrai :
cat fichier
foo foo #'tab' 'foo' 'tab' 'foo'
bar bar #'3 espaces' 'bar' '3 espaces' 'bar'
baz baz #espace 'baz' espace 'baz'
while read; do echo "$REPLY"; done < fichier
foo foo #'tab' 'foo' 'tab' 'foo'
bar bar #'3 esapces' 'bar' '3 espaces' 'bar'
baz baz #'espace' 'baz' 'espace' 'baz'
while IFS='' read line; do echo "line"; done < fichier
foo foo #tab 'foo' tab 'foo'
bar bar #'3 espaces' 'bar' '3 espaces' 'bar'
baz baz #'espace' 'baz' 'espace' 'baz'