Bonjour a tous,
Comment couper des ligne dans un fichier a partir d'un N° de ligne?
Voici mon script:
#!/bin/sh
rep="/log"
fic="trace.log"
NumDebut=`cat -n $rep/$fic | grep "/09/" | head -n1 | awk '{print $1}' `
NumFin=`cat -n $rep/$fic | grep "/09/" | tail -1 | awk '{print $1}'`
sed -e "$NumDebut,$NumFind" > $rep/filtre.txt
exit
C'est la dernière ligne avec sed qui ne marche pas.
Je ne trouve pas comment couper les lignes trouves par NumDebut et NumFin. Pourtant c'est bien cette commande avec sed ? pour couper des lignes dans un fichier ?
Quelqu'un a t'il une solution ?
Merci pour toutes réponses.
# sed
Posté par Ramón Perez (site web personnel) . Évalué à 1.
sed -n 5,9p $rep/$fic
[^] # Re: sed
Posté par xusnet . Évalué à 1.
[^] # Re: sed
Posté par netsurfeur . Évalué à 2.
[^] # Re: sed
Posté par xusnet . Évalué à 1.
ça marche.
Merci aussi a tous pour toutes les réponses.
# pb de variable shell
Posté par tgl . Évalué à 4.
Ici, ton shell va faire une substitution de "$NumFind" par rien du tout vu que la variable NumFind n'existe pas. Ce que tu veux, c'est plutôt "${NumDebut},${NumFin}d" : les accolades permettent de bien délimiter ce qui est nom de variable et ce qui ne l'est pas.
Bon et sinon, je vois pas trop sur quel fichier ton sed est censé travailler. Enfin, là il va bosser sur l'entrée standard, donc faut que tu pipes un truc vers ton script shell. Si c'est pas ça que tu voulais faire, faudrait que tu passes le nom du fichier en argument à sed.
[^] # Re: pb de variable shell
Posté par xusnet . Évalué à 1.
J'ai fait cette commande:
sed -e "${Numdebut},${NumFin}d" $rep/$fic > $rep/filtre.txt
ça marche, mais y a un os:
les lignes de mon fichier $fic non pas été coupés.
En faite cette commande fait la même chose que grep mais un peut plus élaboré parce qu'on lui impose des N° de lignes.
Ce que je souhaite, c'est qu'il coupe les lignes souhaités et les colles dans un autre fichier.
Le problème est comment faire ? je ne trouve pas!
j'ai pensé a sed mais ?...
[^] # Re: pb de variable shell
Posté par tgl . Évalué à 2.
En sed, ça pourrait se faire avec d'une part l'option '-i', qui permet de modifier un fichier sur place (ici, on va lui faire des 'd' pour effacer les lignes à couper), et d'autre part avec la commande 'w' qui permet d'écrire dans un fichier. Ça donnerait ça (oui oui, sur 2 lignes, pour séparer les 2 commandes entre accolades) :
sed -i -e "${Numdebut},${NumFin}{w$rep/filtre.txt
d}" $rep/$fic
[^] # Re: pb de variable shell
Posté par 태 (site web personnel) . Évalué à 2.
# awk : tout d'un coup
Posté par Bonnefille Guilhem (site web personnel) . Évalué à 2.
awk "NR==$NumDebut,NR==$NumFin{print>\"fichier_colle\"}NR<$NumDebut||NR>$NumFin{print}' fichier_entree > fichier_coupe
Et voilou. Les lignes coupées sont dans fichier_colle. Le fichier fichier_coupe ne contient plus les lignes coupées.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.