Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/07/2011, 14h45   #1
Membre éprouvé
 
Avatar de _shuriken_
 
Homme
Consultant telecoms
Inscription : mars 2006
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27

Informations professionnelles :
Activité : Consultant telecoms
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2006
Messages : 426
Points : 410
Points : 410
Par défaut Rechercher/remplacer une chaine de caractères dans plusieurs fichiers

Bonjour à tous,

Voila, j'ai plusieurs fichiers avec la même structure, j'aimerai me positionner sur un champs bien précis, et faire un test, s'il est vide et mettre "00" à la place.

J'avais pensé à un script du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
 
awk '
{ if ( substr($0,41,56)=="")
     print substr($0,41,56) "00"
  else
     print
}' Fichier_en_entree> Fichier_en_sortie
 
 
# Fin du script
Il me faut un code, qui prenne en compte des milliers de fichiers, parcourir ligne par ligne chaque fichier, se positionner sur le champs en question et faire un test s'il est vide et le remplacé par 00.

Merci d'avance à vous tous !
__________________
"When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

Lord Kelvin - 1883.
_shuriken_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 16h21   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
tu peux le laisser comme ça et l'appeler depuis un find.

Code :
nohup find /chemin/depart/ -type f -exec TONSCRIPT.awk {} \;  &
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 17h41   #3
Membre éprouvé
 
Avatar de _shuriken_
 
Homme
Consultant telecoms
Inscription : mars 2006
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27

Informations professionnelles :
Activité : Consultant telecoms
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2006
Messages : 426
Points : 410
Points : 410
Merci,

Mais mon script ne passe pas, je ne sais pas pourquoi, il s'exécute sans erreur, mais ne modifie rien.
__________________
"When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

Lord Kelvin - 1883.
_shuriken_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h41   #4
Membre éprouvé
 
Avatar de _shuriken_
 
Homme
Consultant telecoms
Inscription : mars 2006
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27

Informations professionnelles :
Activité : Consultant telecoms
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2006
Messages : 426
Points : 410
Points : 410
Bonjour à tous,

Ce bout de code règle mon soucis :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
#!/bin/sh
 
rejected_directory = `cd /home/perso/data`
 
if [ -d $rejected_directory ];then
         echo "Directory doesn't exist, please see path describe below"
else
	# Find files on directory
	file_liste = `ll`
        for i in $file_liste;do
 
	sed -e 's/^\(.\{41\}\)  /\100/'  $i
	done
fi
__________________
"When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

Lord Kelvin - 1883.
_shuriken_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h59   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

Citation:
Code :
rejected_directory = `cd /home/perso/data`
ça m'étonnerait que cela fasse quoi que ce soit, et aussi que cela ne provoque pas d'erreur :
- il ne devrait pas y avoir d'espaces autour du signe égal
- cd n'affiche rien
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 20h06   #6
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par _shuriken_ Voir le message
Citation:
Envoyé par _shuriken_ Voir le message
Bonjour à tous,

Voila, j'ai plusieurs fichiers avec la même structure, j'aimerai me positionner sur un champs bien précis, et faire un test, s'il est vide et mettre "00" à la place.

J'avais pensé à un script du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
 
awk '
{ if ( substr($0,41,56)=="")
     print substr($0,41,56) "00"
  else
     print
}' Fichier_en_entree> Fichier_en_sortie
 
 
# Fin du script


Merci,

Mais mon script ne passe pas, je ne sais pas pourquoi, il s'exécute sans erreur, mais ne modifie rien.
Ben c'est normal !!! Ton script n'est pas sensé modifier le fichier d'origine mais créer une copie modifiée !!!

Une petite modification de ton script et associé à la suggestion de frp31, ça fera ce que tu veux

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
 
exec 3<Fichier_en_entree
rm -f Fichier_en_entree
 
awk '
{ if ( substr($0,41,56)=="")
     print substr($0,41,56) "00"
  else
     print
}' 0<&3 >Fichier_en_entree
 
 
# Fin du script
Accessoirement ce que tu nous as écrit hier (comme l'a dit N_Bah) n'a aucun sens !!!
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h10.


 
 
 
 
Partenaires

Hébergement Web