Modificatio contenu de fichier

Fermé
DKAM - Modifié par DKAM le 31/03/2016 à 19:48
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 5 avril 2016 à 08:59
Bonjour,

Salut les amis,

je travaille sur une application qui récupère le contenu d'un fichier à partir de la ligne 34. Avant le chargement des fichiers dans cette application, je dois ouvrir chaque fichier et supprimer où ajouter des lignes vides de façon à ce que la partie du contenu du fichier pris en compte par l'application soit à la ligne 34.
je dois effectuer cette tache répétitive pour plusieurs milliers de fichiers.
Comment pourrais-je automatiser cette tâche à l'aide de script shell?.
NB: La première ligne de la partie du contenu qui est pris en compte par l'application commence par 60012 (par exemple) pour tous les fichiers.

A voir également:

2 réponses

Utilisateur anonyme
31 mars 2016 à 20:01
ligne=`grep -n contenudeligne34 tonfichier | cut -d: -f1`

Ligne contient donc le numéro de la ligne où se trouvent les information devant se trouver en ligne 34

Si lignes > 34 il faut supprimer ligne-34 ligne(s)
Si lignes < 34 il faut ajouter 34-ligne ligne(s)

Pour supprimer les lignes tu peux y aller à coups de sed ou head/tail, pour en ajouter je n'ai pas cherché de manière "propre" mais tu peux faire ceci :

Tu crées un fichier contenant un retour à la ligne (nommons le li)

ajouter une ligne reviens à faire

cat li tonfichier > tmp
mv tmp tonfichier


Tu peux faire passer tout ça dans des boucles for pour ajouter/supprimer le nb de lignes voulues
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
31 mars 2016 à 22:20
Salut,

grep -n contenudeligne34 tonfichier | cut -d: -f1

Avec sed c'est plus simple :
sed -n '/motif/=' fichier


Mais pour en revenir au problème initial, à chercher le numéro de ligne du motif, avec grep ou sed ou autre commande, autant essayer de le faire avec l'application initiale, qui, si elle sait trouver un numéro de ligne, doit être sûrement capable de trouver un motif, non ?
0
DKAM > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
4 avril 2016 à 17:11
non non, je ne crois. on modifie le fichier directement au niveau du serveur et on le stock dans un dossier. l'application, elle, va maintenant chercher le fichier sur le serveur pour le charger.
0
Merci Rocailleux, je vais m'en inspirer et te faire un retour.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
1 avril 2016 à 10:24
hello
insère 34 lignes vides avant 60012
(printf "%.0s\n" {1..34}; sed -n '/60012/,$p' fichier) > fichier2
0
juuuustement dubcek, cela aurait été plus simple. mais avant la ligne 34 il y a des lignes qui ne sont pas en commentaire, telles que la date de création du fichier, des adresse...(en-tête). qui ne doivent pas être supprimées.
Donc ce sont les lignes vides que je dois supprimer pour que la 1ere ligne commençant par 61202... soit à la ligne 34.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 5/04/2016 à 09:37
il faut seulement supprimer des lignes vides ou faut il aussi en rajouter si 61202 est avant la 34ème ligne ?

essayer ça
affiche les lignes non vides, affiche des lignes vides jusqu'à la ligne 33, puis le reste
awk -v l=34 '/^61202/ {for (n=a; n<l-1; n++)print ""} NF {print; a++}' fichier
0