Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/05/2013, à 18:55

nefaste-secure

[RESOLU]AWK,COLUMN besoin d'aide merci

Bonjour je cherche actuellement à faire quelque chose qui je ne sais pas si au final est réalisable , mais je suis sur que les plus connaisseur d'entre vous pourrons m'éclairer...je m'explique

j'ai un premier fichier texte sous cette forme  :

fileIpPort.txt

192.168.0.10  80 
192.168.0.11  8080 
192.168.0.12  3128 
192.168.0.13  80 
192.168.0.14  8080 
192.168.0.15  80 

etc....

et un second fichier texte sous cette forme :

fileProto.txt

HTTP
HTTPS
HTTP
SOCK4/5
HTTPS
HTTP

etc...

Je cherche à ouvrir en lecture les deux fichiers et les afficher en colonne , j'ai essayé ça :

(cat fileIpPort.txt;cat fileProto.txt | sed 's/.*/:&/g') | awk  -F ':' {'print $1,$2'} | column -t

mais le résultat est le suivant (et j'ai du mal à comprendre pourquoi^^)

192.168.0.10  80 
192.168.0.11  8080 
192.168.0.12  3128 
192.168.0.13  80 
192.168.0.14  8080 
192.168.0.15  80 
HTTP
HTTPS
HTTP
SOCK4/5
HTTPS
HTTP

au lieu du résultat souhaité :

192.168.0.10  80      HTTP
192.168.0.11  8080    HTTPS
192.168.0.12  3128    HTTP
192.168.0.13  80      SOCK4/5
192.168.0.14  8080    HTTPS 
192.168.0.15  80      HTTP

Je suis actuellement en train de regarder ICI
Merci à ceux qui prendront le temps de lire et de m'éclairer ...

Dernière modification par nefaste-secure (Le 26/05/2013, à 19:37)

Hors ligne

#2 Le 26/05/2013, à 19:29

pingouinux

Re : [RESOLU]AWK,COLUMN besoin d'aide merci

Bonjour,
Essaye :

paste fichier_1 fichier_2

Hors ligne

#3 Le 26/05/2013, à 19:35

nefaste-secure

Re : [RESOLU]AWK,COLUMN besoin d'aide merci

Parfait exactement ce que je cherchais
^^, vraiment merci je suis passé à coté ... merci à toi !

Dernière modification par nefaste-secure (Le 26/05/2013, à 19:36)

Hors ligne

#4 Le 26/05/2013, à 19:40

toulipe

Re : [RESOLU]AWK,COLUMN besoin d'aide merci

Avec python

with open('file1') as f:
	lines1 = f.read().splitlines()

with open('file2') as f:
	lines2 = f.read().splitlines()

for l1, l2 in zip(lines1, lines2):
	print('%s\t%s\t' % (l1, l2))

Dernière modification par toulipe (Le 26/05/2013, à 19:40)

Hors ligne

#5 Le 07/09/2013, à 22:17

med1986

Re : [RESOLU]AWK,COLUMN besoin d'aide merci

Bonjour,

J'ai ce fichier en entrée :


C1L1;C2L1;C3L1;C4L1;C5L1;C6L1;C7L1;C8L1;C9L1;C10L1;C11L1;C12L1;
C1L2;C2L2;C3L2;C4L2;C5L2;C6L2;C7L2;
C1L3;C2L3;C3L3;C4L3;C5L3;C6L3;C7L3;C8L3;C9L3;
C1L4;C2L4;C3L4;C4L4;C5L4;C6L4;C7L4;C8L4;C9L4;C10L4;C11L4;C12L4;
C1L5;C2L5;C3L5;C4L5;C5L5;C6L5;C7L5;C8L5;
C1L6;C2L6;C3L6;C4L6;C5L6;C6L6;C7L6;C8L6;C9L6;C10L6;C11L6;C12L6;


je veux recuperer uniquement les deux premieres colonnes et les deux dernieres et pas tout ce qui se presente entre les deux qui peut etre variable.

J'ai fait ca

  awk -F";" '{
            for (j=1; j<2; j++)
               if ( j==1 )
                  printf("%s",$j)
               if ( j!=1 )
                 printf(";%s",$j)
               
             for (i=NF; i>NF-3; i--)
                 printf("%s;",$i)
               print ""
             }' fichier_ioda_test
en sortie:

C1L1;C2L1;C12L1;C11L1;
C1L2;C2L2;C7L2;C6L2;
C1L3;C2L3;C9L3;C8L3;
C1L4;C2L4;C12L4;C11L4;
C1L5;C2L5;C8L5;C7L5;
C1L6;C2L6;C12L6;C11L6;

cela est correct, mais le seul soucis est que les deux dernieres colonnes sont inversées, merci de m'aider

Hors ligne

#6 Le 08/09/2013, à 08:51

pingouinux

Re : [RESOLU]AWK,COLUMN besoin d'aide merci

Bonjour,

awk -F";" '{print $1";"$2";"$(NF-2)";"$(NF-1)";"}' fichier_ioda_test

Ajouté :

mais le seul soucis est que les deux dernieres colonnes sont inversées

C'est parce que tu fais décroître l'indice de la boucle

for (i=NF; i>NF-3; i--)

Voici une façon correcte d'écrire tes boucles

awk -F";" '{
             for (j=1; j<3; j++)     printf("%s;",$j)
             for (i=NF-2; i<NF; i++) printf("%s;",$i)
             print ""
           }' fichier_ioda_test

Édité :
Voici une autre façon de faire avec sed (qui a l'avantage de ne pas dupliquer les colonnes s'il y en a moins de quatre)

sed -r 's/(([^;]+;){2}).*;(([^;]+;){2})/\1\3/' fichier_ioda_test

Dernière modification par pingouinux (Le 10/09/2013, à 08:59)

Hors ligne