0
votes

Lire le fichier et compter les ports en double dans x colonne

J'ai le fichier texte suivant:

sortie.log p>

Estructure du texte du fichier: p>

5896; 192.168.1.1 443 strong> 186.56.21.30 Règle: 45;
4587; 192.168.1.1 80 fort> 196.46.65.12 Règle: 25;
7815; 192.168.2.1 443 strong> 185.45.65.23 Règle: 10;
5578; 192.168.3.5 535 strong> 165.98.45.45 Règle: 5;
4587; 192.168.1.1 80 fort> 196.46.65.12 Règle: 25; p>

Je voudrais savoir combien de fois x port de colonne 3 est répété sans connaître sa valeur ou en tapant Dans le script. strong> p>

Pour le moment, je teste ce code, juste pour comprendre la logique, mais je trouve vraiment comment faire correctement. P>

file="output.log"
cat $file  | awk {'print $1, $2, $3, $4, $27, $5, $6'} | tr -d ';' | tr -d ':' | grep "Rule" | while read src_port src_ip dst_port dst_ip rule num_rule;
do  
    uniq_dst_port=$(cat $file | awk {'print $3'} | tr -d ';' | tr -d ':' | sort | uniq)

    for u_dst_port in $uniq_dst_port;
    do
        #echo "FIRST BUCLE: $dst_port SECOND_BUCLE: $u_dst_port"
        #sleep 1
        if [[ $dst_port == $u_dst_port ]]; then
            #echo "IS EQUAL...."
            n=$((n+1))
        fi
    done
    if [[ $dst_port == $dst_port ]]; then
        echo "The Port: $dst_port  repeat $n Time"
    else
        echo "" >> /dev/null
    fi
done


0 commentaires

3 Réponses :


-1
votes
The Port 443 repeat 22 Time.
The Port 535 repeat 12 Time.
The Port 80 repeat 22 Time.

1 commentaires

Merci chérie, oui, c'est génial, mais je voudrais garder le numéro de ligne au cas où je souhaiterais imprimer sous les sources où le match a été trouvé. C'est pourquoi je veux le faire avec des boucles, c'est-à-dire que je veux savoir comment traiter avec la manipulation des boucles dans ce cas.



0
votes

Une autre approximation pour obtenir la sortie souhaitée peut être xxx pré>

puis, mon script test.sh pour le traiter p> xxx pré>

alors, Exemple de course P>

$ more output.log
5896; 192.168.1.1 443 186.56.21.30 Rule: 45;
4587; 192.168.1.1 80 196.46.65.12 Rule: 25;
7815; 192.168.2.1 443 185.45.65.23 Rule: 10;
5578; 192.168.3.5 535 165.98.45.45 Rule: 5;
4587; 192.168.1.1 80 196.46.65.12 Rule: 25;
$ ./test.sh
The port 443 repeat 2 times for rules 45, 10
The port 535 repeat 1 times for rules 5
The port 80 repeat 2 times for rules 25


9 commentaires

Pouvez-vous modifier votre question et fournir le contenu du fichier d'entrée? Dans mon cas, j'ai utilisé l'exemple que vous avez fourni dans votre question.


I La sortie de tmpfile.txt Je vois que la ligne ultime répéter 5 fois avec ceci: le port 80 Répéter 2 fois pour les règles 25, 25, 5, 45, 10 Pourquoi?


Le fichier d'entrée est le même sur mon message.


Mmm L'erreur est que dans mon fichier d'entrée, le dernier caractère de chaque ligne est un espace ....


Si vous avez des espaces vides à la fin, utilisez cette SED 'S / * $ // G'``


Merci@roberto Hernandez


Salut @LestHermartinreyesexinoza, pourquoi avez-vous révélé l'acceptation dans la réponse ?? Ou au moins si vous le dodiez, évitez la réponse que vous êtes reconnaissant pour l'aide fournie.


Vous lisez l'intégralité du fichier (sortie.log) et appelez trop de fois des commandes externes. C'est une overcilleuse. Le travail pourrait être fait en une seule passe comme dans la réponse acceptée.


Bonjour @LXERLX, je ne dis pas que la réponse acceptée est meilleure, à coup sûr, mais n'implique pas à être reconnaissant lorsque quelqu'un répond à toutes les questions des commentaires et de travailler pour résoudre le problème. Je crois que ça vaut aussi la peine



2
votes

en plaine bash:
xxx pré>

./ script Imprime P>

The port 80 repeat 2 times for rules 25.
The port 443 repeat 2 times for rules 10, 45.
The port 535 repeat 1 times for rules 5.


2 commentaires

Quelle moyenne% d% d% s dans la dernière ligne de Printf ?? Où enquêtez-vous davantage pour ce sujet avec des exemples? @M. Nejat Aydin merci


@LestHermartinreyesSexinoza in Printf , % d signifie que l'argument correspondant sera imprimé sous forme d'entier décimal et en tant que chaîne pour % s . Rechercher printf dans Manuel de référence Bash . Également lié à (mais différent de) Printf de Bash: lisez la page manuelle de printf (3) : man 3 printf ou FPRRINTF . Lire le Extransion du paramètre Shell pour comprendre < code> $ {# n} et $ {liste% ??} .