#1 Le 14/03/2013, à 11:29
- Lomic
Résultat d'un cat|grep|awk|sort utilisé par whois
J'adore le terminal, bon parfois j'ai des trous de mémoire et je ne sais plus comment faire certaines choses...
Dans mon cas présent, je veux faire un "whois" sur chaque ligne sortie par une commande plus longue:
cat monsite.fr-12-03-2013.log | grep qqch | awk -F " " '{print $1}' | sort -u
Qui me sort une liste d'IP qui font "qqch" dans mes logs serveur.
Je voudrais passer un coup de "whois" derrière (que je greperai pour sortir par exemple que le "netname")
Mais ajouter "| whois | grep netname" derrière ne donne rien.
Qu'est-ce que je loupe?
Merci
Hors ligne
#2 Le 14/03/2013, à 12:29
- Yannou90
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
Bonjours
Quelque chose comme çà peut-être :
grep "qqchose" monsite.fr-12-03-2013.log | cut -d" " -f1 | sort -u | xargs whois
Pas testé ...
Dernière modification par Yannou90 (Le 14/03/2013, à 12:29)
Hors ligne
#3 Le 14/03/2013, à 12:34
- credenhill
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
hello
cat, grep et -F " " sont inutiles.
essayer
whois $(awk '/qqch/ {print $1}' monsite.fr-12-03-2013.log | sort -u)
Hors ligne
#4 Le 14/03/2013, à 12:36
- Lomic
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
Merci Yannou90 mais "xargs whois" ne fonctionne pas, ni avec ta commande, ni avec la mienne
Il me répond "Aucun serveur whois n'est connu pour ce type d'objet."
@credenhill : merci mais j'obtiens le même message d'erreur qu'avec la commande Yannou et la mienne.
Dernière modification par Lomic (Le 14/03/2013, à 12:38)
Hors ligne
#5 Le 14/03/2013, à 13:33
- credenhill
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
effectvment, whois n'accepte qu'un seul nom
essayer
awk '/qqch/ {print $1}' monsite.fr-12-03-2013.log | sort -u | xargs -I{} whois {}
Dernière modification par credenhill (Le 14/03/2013, à 13:34)
Hors ligne
#6 Le 14/03/2013, à 13:36
- Lomic
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
ça marche parfaitement!
merci credenhill
peux-tu résumer le fonctionnement de cette partie : xargs -I{} whois {}
Hors ligne
#7 Le 14/03/2013, à 13:45
- Lomic
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
en poussant le bouchon un peu plus loin, je souhaite récupérer les lignes 12, 13 et 14 de chaque whois généré
sur un whois seul avec une IP je fais
whois 192.168.0.1 | head -n 14 | tail -n 3
mais là ça ne fonctionne pas, il doit faire le head/tail sur l'ensemble de la sortie et non chaque whois
Hors ligne
#8 Le 14/03/2013, à 13:58
- credenhill
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
essayer
awk '/qqch/ {print $1}' monsite.fr-12-03-2013.log | sort -u | xargs -I{} bash -c "whois {} | awk 'NR>11 && NR<15'" |
xargs -I{} bash -c "whois {} | : xargs remplace {} par le nom qui vient du pipe et exécute whois [nom], 1 nom par commande
j'uilise awk pour garder les lignes 12-14, mais tu peux utiliser head et tail
Hors ligne
#9 Le 14/03/2013, à 14:04
- Lomic
Hors ligne
#10 Le 15/03/2013, à 02:05
- nesthib
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
Quelques suggestions.
Au lieu de faire awk + sort, il est possible d'obtenir une sortie unique en une seule fois :
awk '/qqch/{if(!_[$1]++){print $1}}' log | …
Il est possible de définir le nombre maximum d'arguments pour xargs (par défaut il essaie de lancer la commande avec des arguments multiples) :
… | xargs -n1 whois
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#11 Le 15/03/2013, à 09:30
- Lomic
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
merci pour les tuyaux nesthib
pour ce qui est de ma façon de faire, en fait, je pars généralement d'une commande simple, et je pipe au fur et à mesure avec d'autres commandes pour écrémer mon résultat, d'où cette façon peu orthodoxe
Hors ligne
#12 Le 15/03/2013, à 23:33
- nesthib
Re : Résultat d'un cat|grep|awk|sort utilisé par whois
À vrai dire le pipe correspond tout à fait à la philosophie UNIX, une chose à la fois, bien faite. On enchaîne donc plein de « petites » commandes pour faire son programme. La limite est que si tu travailles avec des gros fichiers tu perds en efficacité. Un autre facteur est que la plupart des gens ont une vision restreinte du rôle de chaque commande, grep → filtrer une ligne, sed → changer un mot, awk/cut → afficher une colonne, head/tail → limiter au début à la fin d'un fichier… alors qu'en réalité la plupart des commandes sont plus puissantes qu'on ne le croit (par exemple awk et sed font tout ce que j'ai décrit… et bien plus…)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne