Commandes DOS

Commandes DOS - Win 10 - Windows & Software

Marsh Posté le 09-07-2021 à 12:00:35    

Bonjour
 
Ma question va vous paraître certainement "con" mais je n'arrive pas à trouver la solution.
 
J'ai un fichier de commandes SQL où je cherche à isoler parmi les milliers de lignes un ordre particulier.
J'utilise d'invite de commande DOS pour ce boulot.
 
J'ai isolé le numéro de ligne qui m'intéresse via la commande findstr.
=> Numéro de ligne de début 15278
J'ai besoin des 100 lignes suivantes.
 
Je souhaite me créer un 2ème fichier SQL avec uniquement les lignes 15278 à 15377 du 1er fichier.
 
J'ai l'utilitaire sed.exe bien positionné dans mon répertoire de travail.
 
 
J'ai trouvé comment créer un nouveau fichier sans ces lignes en utilisant l'option d de SED.
sed 15278,15377d  fichier1 >> fichier2
 
mais pas comment isoler ces lignes dans mon nouveau fichier (=garder uniquement la partie supprimée).
 
Il doit bien y avoir une option SED pour faire facilement cela.
 
La dernière chose tentée mais qui ne fonctionne pas.
sed -n 15278,15377r fichier1 >> fichier2
 
 
Merci d'avance pour votre aide.
 
 
 

Reply

Marsh Posté le 09-07-2021 à 12:00:35   

Reply

Marsh Posté le 09-07-2021 à 12:43:15    

sed -n 15278,15377p ?

Reply

Marsh Posté le 09-07-2021 à 12:45:40    

Bonjour,
 
Comme ceci avec sed :  

sed -n '15278,15377p;15377q' fichier1 >> fichier2


 
"-n <line1>,<line2>p" permet de ne garder que les lignes dans l'intervalle défini
"<line2>q" est une optimisation qui indique à sed de s'arrêter là et de ne pas continuer à lire le fichier; utile en cas de fichier lourd

Reply

Marsh Posté le 09-07-2021 à 13:00:23    

Merci à vous 2.
 
Ce qui marche :  
sed -n 15278,15377p;15377q fichier1 >> fichier2  
 
Très bonne idée de me proposer l'optimisation avec l'option q car je travaille effectivement sur de gros fichiers.

Reply

Marsh Posté le 09-07-2021 à 13:13:32    

Question bonus :
 
C'est possible de mentionner plusieurs intervalles en une seule ligne de commande ?
 
ex : je voudrais que mon fichier2 contiennent aussi les lignes 100 à 300 avant les lignes 15278 à 15377

Reply

Marsh Posté le 09-07-2021 à 13:19:54    

sed -n 100,300p;15278,15377p;15377q fichier1 >> fichier2  

?

Reply

Marsh Posté le 09-07-2021 à 13:28:19    

Nickel
J'avais essayé mais ça avait planté car j'avais du faire une erreur


Message édité par xaramelaz le 09-07-2021 à 13:29:07
Reply

Marsh Posté le 12-07-2021 à 10:52:58    

Bonjour
 
Maintenant que j'ai bien isolé toutes les parties du code qui m'intéressaient dans des fichiers séparés, je veux faire des substitutions de texte.
 
Mes fichiers ont beaucoup diminué en volume (au moins divisé par 3) mais certains sont encore très gros.
 
Je cherche maintenant à remplacer certaines lignes commençant par "MOT" par des ; dans les fichiers source.
Je sais que mes lignes à remplacer sont forcément dans les 1000 premières lignes des fichiers.
 
Voici ce que j'ai essayé :
sed s/MOT.*/;/;1000q *.txt
 
J'ai seulement le résultat à l'écran. Le remplacement ne se fait pas dans chaque fichier source.
 
Auriez-vous une solution ?

Reply

Marsh Posté le 12-07-2021 à 11:05:34    

C’est pas "-i" pour le remplacement in place ?


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 12-07-2021 à 11:17:01    

-i fonctionne bien pour le remplacement dans le fichier
 
Je ne peux cependant pas exploiter la notion de "1000 premières lignes".
sed -i s/MOT.*/;/;1000q *.txt  
 
Le nouveau fichier modifié ayant le nom de l'ancien ne contient alors que les 1000 premières lignes.

Reply

Marsh Posté le 12-07-2021 à 11:17:01   

Reply

Marsh Posté le 12-07-2021 à 11:19:09    

Si je ne peux pas exploiter la notion de "n premières lignes", une autre piste pourrait être le nombre de changements à faire.
 
Je sais que ces remplacements sont à faire maximum 30 fois en fonction des fichiers.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed