Désolé de remonter ça des tréfonds du forum, mais vu que ça sort en premier résultat dans Google, je me devais d'apporter quelques corrections parce que ce qui est dit ici est un peu pas très propre sans vouloir offenser personne
Pour commencer :
cat db.10.26.13 | grep PTR | awk '{OFS=":";print $1,$4}' > result |
voici un bel exemple de Useless Use of Cat !
1) cat est inutile car on peut très bien faire un grep sur un fichier :
grep PTR db.10.26.13| awk '{OFS=":";print $1,$4}' > result |
2) mais en plus, grep est également inutile car awk se suffit à lui même :
awk '/PTR/ {OFS=":";print $1,$4}' db.10.26.13 > result |
la partie /PTR/ indique que ce qui suit {print...} ne sera fait que pour les lignes qui comportent PTR
3) on peut même améliorer si on considère à juste titre que PTR sera dans la 3ème colonne (normalement) :
awk '$3=="PTR" {OFS=":";print $1,$4}' db.10.26.13 > result |
Personnellement, pour un truc aussi simple, j'aurais tendance à faire ceci et à éviter d'ajouter du OFS :
awk '$3=="PTR" {print $1":"$4}' db.10.26.13 > result |
Bon, ça, c'est pour la partie grep / awk / cat...
Pour la partie perl, j'avoue que je ne comprends même pas le but du morceau de programme... mais si il faut faire pareil que ce qu'on a avec cat/grep/awk, voici une méthode un peu plus légère et propre (à adapter au niveau regexp si on veut blinder le truc) :
perl -ne "print qq|$1:$2\n| if (/(\d+)\s+IN\s+PTR\s+([\.\w]+)/);" db.test |
-ne : boucle sur un fichier passé en paramètre en lisant chaque ligne et en alimentant $_
print ... if ... affiche ce qui suit print si ce qui suit if est vrai (sinon, n'affiche rien)
qq|$1:$2\n| équivalent à "$1:$2\n" (j'utilise qq parce que je suis sous Windows), affiche le premier et le second champ capturé de la regexp (cf. ci-dessous) séparés par deux-points
/(\d+)\s+IN\s+PTR\s+([\.\w]+)/ regexp utilisée d'une part pour filtrer les lignes à afficher et d'autre part pour récupérer les 2 champs qu'on souhaite afficher ($1 et $2 du print). Cette regexp signifie que les lignes doivent être composées de :
- un ou plusieurs chiffres \d+ > capture $1
- un ou plusieurs espaces (ou tabulations ou ...) \s+
- le texte IN
- un ou plusieurs espaces (ou tabulations ou ...) \s+
- le texte PTR > permet de ne prendre que les lignes PTR
- un ou plusieurs espaces (ou tabulations ou ...) \s+
- une suite de lettre et de . [\.\w]+ > capture $2
à adapter en fonction du besoin réel
Encore désolé pour le déterrage
, je retourne à mes recherches ^^