insérer une ligne dans le fichier - Shell/Batch - Programmation
Marsh Posté le 04-04-2008 à 21:00:05
Citation : sed |
Ah, c'est de l'Unix ?
Awk, par exemple (non testé) :
awk { |
Ou une boucle read, par exemple (non testé) :
cat toto.txt | while read theline |
Il doit aussi être possible d'utiliser sed pour insérer une ligne car il doit être possible de remplace une chaine par une autre qui contient un ou plusieurs retour à la ligne.
Mais le plus simple est de récupérer le fichier et de le retravailler sur son PC, par exemple avec un petit script VBS.
Marsh Posté le 05-04-2008 à 08:00:59
Merci, j'essaie ça lundi. Normalement avec sed \a on devrait insérer mais ça ne marche pas et de plus sed ne reconnait pas \n comme un saut de ligne!
Marsh Posté le 05-04-2008 à 12:06:57
richard3 a écrit : Merci, j'essaie ça lundi. Normalement avec sed \a on devrait insérer mais ça ne marche pas et de plus sed ne reconnait pas \n comme un saut de ligne! |
Tu es en train d'essayer de lire et d'écrire dans le même fichier ce qui est très dangereux si on s'y prend mal. Une bonne façon de faire est de passer par un second fichier. Sinon la seule façon de faire que j'ai trouvé est de mémoriser tout le fichier dans mon processus et d'effacer ensuite le fichier pour le recréer. Et j'ai fait des tests, ça a marché même avec des fichiers qui dépassent le Go...
Code :
|
Marsh Posté le 10-04-2008 à 09:55:50
J'ai écrit ça: avec un fichier d'entree "entree.csv" (voir plus bas)
IFS="!"
if [ $# -lt 1 ]
then
echo "nom du fichier[.csv]"
exit
fi
for lg in `cat $1`
do
Code=`echo $lg | awk -F";" '{ printf "%s", $1 }'`
Chaine = `echo $lg | awk -F";" '{ printf "%s", $2 }'`
Fichier=`echo $lg | awk -F";" '{ printf "%s", $3 }'`
cat $Fichier | while read theline
do
echo "$theline" >> titi
if [ "$theline" = "Insert Into DISCOUNT_RESTRICTIONS Values ("$Code", 5, 3, 15, 0)" ]
then
echo "Insert Into DISCOUNT_RESTRICTIONS Values ("$Code", "$Chaine)" >> titi
fi
done
done
mv titi $Fichier
----------------------------------------------------------------------
fichier d'entree "entree.csv"
26231; 5,3,93,0;g041000.sql;!
27753; 5,3,93,0;g041000.sql;!
26233; 5,3,93,0;g041001.sql;!
27754; 5,3,93,0;g041001.sql;!
26235; 5,3,93,0;g041002.sql;!
27755; 5,3,93,0;g041002.sql;!
26237; 5,3,93,0;g041003.sql;!
27756; 5,3,93,0;g041003.sql;!
26263; 5,3,93,0;g041027.sql;!
26264; 5,3,93,0;g041027.sql;!
26265; 5,3,93,0;g041027.sql;!
26266; 5,3,93,0;g041027.sql;!
26267; 5,3,93,0;g041027.sql;!
26268; 5,3,93,0;g041027.sql;!
26269; 5,3,93,0;g041039.sql;!
26270; 5,3,93,0;g041039.sql;!
26291; 5,3,93,0;g041048.sql;!
Marsh Posté le 11-04-2008 à 14:37:28
richardjf a écrit : et ça ne marche pas.... |
Cette version devrait fonctionner un peu mieux (non testée)
Code :
|
Une autre solution à tester et adapter :
Code :
|
Jean-Pierre.
Marsh Posté le 04-04-2008 à 20:00:35
Bonjour,
J'ai une liste de fichiers.
quand je trouve un pattern du genre "Insert Into Table (26555, 5, 3, , 15, 0)"
je veux insérer une ligne dans le fichier, du genre: "Insert Into Table (26555, 5, 3, , 93, 0)"
sed refuse l'option \a qui permet d'écrire une ligne de plus dans le fichier!
Merci à ceux qui auront des idées!