Problème script bash de nettoyage fichier

Fermé
willy - 23 mai 2011 à 15:39
 Utilisateur anonyme - 23 mai 2011 à 21:57
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!!!

A voir également:

3 réponses

while read fqdn dns; do echo "fqdn = $fqdn -- dns = $dns"; done < fichier
on ne lit pas un fichier autrement.
0
Merci j'ai contourné le problème avec un IFS
0
Utilisateur anonyme
23 mai 2011 à 18:13
Tu ajoutes une complexité à un faux-problème, qui n'existe qu'à cause de ton obstination à faire les choses de travers.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
Modifié par lami20j le 23/05/2011 à 20:02
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. ;-)

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:~$
0
Utilisateur anonyme
23 mai 2011 à 20:19
J'ai corrigé le guillemet manquant. merci.

et effectivement, on peut lire un fichier en awk, en perl, en python, et pourquoi pas en C, mais en n'utilisant que des commandes shell, il n'y a pas 36 solutions correctes.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 mai 2011 à 20:32
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
0
Utilisateur anonyme
23 mai 2011 à 21:07
«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 :


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'
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 mai 2011 à 21:50
Re,

D'accord pour REPLY, bien joué ;-)
Sinon pour la 2ème solution Tu ajoutes une complexité à un faux-problème, ;-DDD
0