Supprimer toutes les lignes avant la ligne qui contient une Variable.
Résolu
bob737
Messages postés
144
Date d'inscription
Statut
Membre
Dernière intervention
-
bob737 Messages postés 144 Date d'inscription Statut Membre Dernière intervention -
bob737 Messages postés 144 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un gros fichier qui ne fait que grossir. Chaque ligne contient sur son 3eme champ la date au format: AAA-MM-JJTHH-MM.
J'aimerais ne garder que les 35 derniers jours et donc supprimer toutes les lignes antérieurs à
DATE35.
DATE35=`date --date "35 days ago" -u +"%Y-%m-%dT%H:%M"`
J'imagine faire une recherche dans le fichier de la variable DATE35, dès qu'il la trouve, il supprime toutes les lignes précédentes.
Une idée sans faire une boucle sur chaque ligne?
Merci.
J'ai un gros fichier qui ne fait que grossir. Chaque ligne contient sur son 3eme champ la date au format: AAA-MM-JJTHH-MM.
J'aimerais ne garder que les 35 derniers jours et donc supprimer toutes les lignes antérieurs à
DATE35.
DATE35=`date --date "35 days ago" -u +"%Y-%m-%dT%H:%M"`
J'imagine faire une recherche dans le fichier de la variable DATE35, dès qu'il la trouve, il supprime toutes les lignes précédentes.
Une idée sans faire une boucle sur chaque ligne?
Merci.
A voir également:
- Supprimer toutes les lignes avant la ligne qui contient une Variable.
- Supprimer rond bleu whatsapp - Guide
- Partager photos en ligne - Guide
- Supprimer une page word - Guide
- Aller à la ligne excel - Guide
- Mètre en ligne - Guide
5 réponses
hello
n=0 donc on n'imprime rien tant qu'il n'y a pas DATE35
quand on trouve DATE35, n=1 et on imprime
n=0 donc on n'imprime rien tant qu'il n'y a pas DATE35
quand on trouve DATE35, n=1 et on imprime
awk -F ',' -v var="$DATE35" -v n=0 '$3 ~ var {n=1}; n {print $0}' FIC
J'ai déjà trouvé ça pour supprimer les lignes dont le 3ème champs est contient la DATE35
Si le traitement est exécuté tous les jours , ça fera le boulot mais j'aurais préféré qu'il supprime aussi les lignes précédentes.
awk -F',' -v var="$DATE35" '$3 !~ var' FIC
Si le traitement est exécuté tous les jours , ça fera le boulot mais j'aurais préféré qu'il supprime aussi les lignes précédentes.
Bonjour,
Désolé, je n'ai pas compris la ligne.
Pourquoi on imprime? le but est de supprimer les lignes dont la date est antérieure à DATE35 sur le 3eme champ.
Merci.
Désolé, je n'ai pas compris la ligne.
Pourquoi on imprime? le but est de supprimer les lignes dont la date est antérieure à DATE35 sur le 3eme champ.
Merci.
Bonjour,
La solution que dubcek te propose suppose que les lignes sont triées par date croissante (selon le 3e champ) et part du principe que tu appliques la commande
Dans sa solution, dubcek te propose de maintenir une variable
Pour compléter la discussion, note que que cette discussion s'intéresse à un problème un peu plus général : extraire les lignes d'un log comprises dans un intervalle de temps. Tu peux donc facilement adapter les solutions proposées dans cette discussion à ton cas de figure.
Bonne chance
La solution que dubcek te propose suppose que les lignes sont triées par date croissante (selon le 3e champ) et part du principe que tu appliques la commande
awkà ce flux, qui fera office de filtre : les lignes conservées traverse
awket sont donc écrites, les autres sont ignorées et donc filtrées.
Dans sa solution, dubcek te propose de maintenir une variable
nqui vaut
0tant qu'on n'a pas rencontré DATE35, et qui est égale à
1quand on l'a rencontrée au moins une (cf
$3 ~ var {n=1};). Si
nvaut
0, alors on est en train de traiter une ligne dont la date est inférieure à
DATE35et donc on ne fait rien. Si
nvaut
1, on la réécrit, ce qui revient à traverser le filtre.
Pour compléter la discussion, note que que cette discussion s'intéresse à un problème un peu plus général : extraire les lignes d'un log comprises dans un intervalle de temps. Tu peux donc facilement adapter les solutions proposées dans cette discussion à ton cas de figure.
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question