Si 2 lignes consécutives ou plus contiennent un motif spécifique, supprimez toutes les lignes correspondantes et ne conservez que la première ligne.
Dans l'exemple ci-dessous, lorsque 2 lignes consécutives ou plus contiennent des "E/S logiques", nous devons supprimer toutes les lignes correspondantes mais conserver la première ligne.
Fichier d'entrée :
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
testing logical IO 500
handling logical IO 49
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
testing logical IO 12
Fichier de sortie :
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
Réponse acceptée :
Utiliser awk
:
awk '/logical IO/ {if (!seen) {print; seen=1}; next}; {print; seen=0}' file.txt
-
/logical IO/ {if (!seen) {print; seen=1}; next}
vérifie si la ligne contientlogical IO
, si trouvé et la variableseen
est faux, c'est-à-dire que la ligne précédente ne contient paslogical IO
, puis imprimez la ligne, définissezseen=1
et passez à la ligne suivante sinon passez à la ligne suivante car la ligne précédente alogical IO
-
Pour toute autre ligne,
{print; seen=0}
, imprime la ligne et les ensemblesseen=0
Exemple :
$ cat file.txt
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
testing logical IO 500
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
parsing logical IO 346
testing logical IO 12
$ awk '/logical IO/ {if (!seen) {print; seen=1}; next}; {print; seen=0}' file.txt
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346