2010-08-21 11 views
-1

J'ai un fichier journal au formatObtenez double ids avec bash

opération id

message de réussite identifiant

Le second ID est identique à la première, mais si seulement la l'opération est réussie. Comment puis-je obtenir ces deux lignes du journal dans un nouveau fichier?

+1

Je n'ai aucune idée de ce que vous demandez ici. –

Répondre

0

il est primative mais vous pouvez faire quelque chose comme ça assez facilement:

cat file.log | cut -d " " -f1 | uniq -d > succesfulOperationIDs.dat 

while read line 
do 
    grep ^$line file.log > successLog.log 
done < succesfulOperationIDs.dat 

rm -f succesfulOperationIDs.dat 

Cela crée une liste des id qui apparaissent plus d'une fois (en supposant un espace est le droit délimiteur) met alors toutes les lignes commençant par les id est dans un nouveau fichier.

0

pour cette solution:

awk '{if ($1 == previd) {print prevline; print} else {previd = $1; prevline = $0}}' logfile > newfile 

Il suppose que les messages de succès suivent immédiatement les messages d'opération.

Si ce n'est pas le cas, essayez ceci:

awk '{if (ids[$1]) {print lines[$1]; print} else {ids[$1] = $1; lines[$1] = $0}}' logfile > newfile 

Si les opérations et les messages de succès apparaissent par paires plus d'une fois avec le même ID, vous pouvez réinitialiser le suivi à chaque fois que la paire est sortie :

awk '{if (ids[$1]) {print lines[$1]; print; delete ids[$1]; delete lines[$1]} else {ids[$1] = $1; lines[$1] = $0}}' logfile > newfile