Shell sed ou awk
Résolu
yo49
-
yo49 -
yo49 -
Bonjour, au pro du shell
j'ai un liste.txt comme celui-ci, et je souhaite ajouter ou soustraire 1 au dernier chiffre mais seulement sur un enregistrement en particulier...
Peugeot | 5008 | 14/10/2009 | 5
Peugeot | 308 CC | 01/03/2009 | 6
Citroën | C-Crosser | 01/06/2007 | 5
Peugeot | 308 RCZ | 01/04/2010 | 0
En tapant "sed 's/17/16/' liste.txt" je fais l'opération mais sur toutes les lignes ! Comment y remédier?
Merci
j'ai un liste.txt comme celui-ci, et je souhaite ajouter ou soustraire 1 au dernier chiffre mais seulement sur un enregistrement en particulier...
Peugeot | 5008 | 14/10/2009 | 5
Peugeot | 308 CC | 01/03/2009 | 6
Citroën | C-Crosser | 01/06/2007 | 5
Peugeot | 308 RCZ | 01/04/2010 | 0
En tapant "sed 's/17/16/' liste.txt" je fais l'opération mais sur toutes les lignes ! Comment y remédier?
Merci
Configuration: Windows / Firefox 3.6 / débutant Shell sur Aix
A voir également:
- Shell sed ou awk
- Classic shell - Télécharger - Personnalisation
- Ssh secure shell - Télécharger - Divers Web & Internet
- Shell origine - Forum Shell
- Classic shell c'est quoi ✓ - Forum Windows 10
- Shell addition ✓ - Forum Shell
11 réponses
Merci pour la précision, j'avais déjà regardé en diagonale ce document.
D'après ce que je veux :
modele="5008"
stock=5
sed '/$modele/ s/$stock/$stock+1/' liste.txt
D'après ce que je veux :
modele="5008"
stock=5
sed '/$modele/ s/$stock/$stock+1/' liste.txt
Ah oui en effet!
Je cherchais la solution idéale entre Grep, Sed et Awk.
En fait, cette ligne combine Sed et Awk ...
Il me reste à "variabilisé" le tout et écrasé mon fic original par le nouveau!
a+
Je cherchais la solution idéale entre Grep, Sed et Awk.
En fait, cette ligne combine Sed et Awk ...
Il me reste à "variabilisé" le tout et écrasé mon fic original par le nouveau!
a+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Donc au final :
$voiture="5008"
awk -F'|' '$2 ~ /'$voiture'/ {$4++} {OFS="|";print}' liste.txt >> listeT.txt
mv listeT.txt liste.txt
echo "Ajout effectué";;
Je cherche la ligne avec le nom de mon modèle ('colonne' 2) et je lui ajoute 1 (4ième 'colonne'). La liste est réédité ailleurs puis écrasée à la place de la liste d'origine...
Merci à vous tous!
$voiture="5008"
awk -F'|' '$2 ~ /'$voiture'/ {$4++} {OFS="|";print}' liste.txt >> listeT.txt
mv listeT.txt liste.txt
echo "Ajout effectué";;
Je cherche la ligne avec le nom de mon modèle ('colonne' 2) et je lui ajoute 1 (4ième 'colonne'). La liste est réédité ailleurs puis écrasée à la place de la liste d'origine...
Merci à vous tous!
Bonjour,
Cependant, lorsque je veux attribuer une valeur à mon '4ième champs', la fonction suivante ne fonctionne pas:
nb= 21
awk -F'|' '$2 ~ /'$voiture'/ {$4==$nb} {OFS="|";print}' liste.txt >> listeT.txt
Pouvez me dire pourquoi, et comment contourner le problème?
Cependant, lorsque je veux attribuer une valeur à mon '4ième champs', la fonction suivante ne fonctionne pas:
nb= 21
awk -F'|' '$2 ~ /'$voiture'/ {$4==$nb} {OFS="|";print}' liste.txt >> listeT.txt
Pouvez me dire pourquoi, et comment contourner le problème?
Avec l'autre solution, c'est la même chose.
J'ai essayé en modifiant $2 ou $1 mais ça ne marche pas.
En affichant la valeur avant et après l'opération : c'est la même!
Peugeot | 308 RCZ | 01/04/2010 | 7
nb=21
awk -F'|' '$2 ~ /'$voiture'/ {print $4;$4=='"$nb"';print $4} {OFS="|";print}'
Résultat :
7
7
Peugeot | 308 RCZ | 01/04/2010 | 7
J'ai essayé en modifiant $2 ou $1 mais ça ne marche pas.
En affichant la valeur avant et après l'opération : c'est la même!
Peugeot | 308 RCZ | 01/04/2010 | 7
nb=21
awk -F'|' '$2 ~ /'$voiture'/ {print $4;$4=='"$nb"';print $4} {OFS="|";print}'
Résultat :
7
7
Peugeot | 308 RCZ | 01/04/2010 | 7
Je ne comprends pas non plus, chez moi je n'ai pas de problème ;-\
jp@MDK:~/tmpfs ssh$ cat plop
Peugeot | 5008 | 14/10/2009 | 5
Peugeot | 308 CC | 01/03/2009 | 6
Citroën | C-Crosser | 01/06/2007 | 5
Peugeot | 308 RCZ | 01/04/2010 | 0
jp@MDK:~/tmpfs ssh$ nb=5 ; voiture=5008 ; awk -F'|' '$2 ~ /'"$voiture"'/ && $4 == '"$nb"' {OFS="|";print}' plop
Peugeot | 5008 | 14/10/2009 | 5
jp@MDK:~/tmpfs ssh$ cat plop
Peugeot | 5008 | 14/10/2009 | 5
Peugeot | 308 CC | 01/03/2009 | 6
Citroën | C-Crosser | 01/06/2007 | 5
Peugeot | 308 RCZ | 01/04/2010 | 0
jp@MDK:~/tmpfs ssh$
ah! j'ai tilté! Au temps pour moi, je me suis mal exprimé.
Je voulais modifier l'enregistrement (4ième champs) dont le modèle est 5008 et non affiché l'enregistrement dont le modele est 5008 ET le nb=5...
Ton exemple est donc correct et il fonctionne pour moi également!
Ce que j'avais (ajoute 1 au chiffre):
awk -F'|' '$2 ~ /'$voiture'/ {$4++} {OFS="|";print}' liste.txt >> listeT.txt
Ce que je voulais (ajoute x ou modifie le chiffre)
awk -F'|' '$2 ~ /'"$voiture"'/ {$4=$4+'$nb'} {OFS="|";print}' liste.txt
awk -F'|' '$2 ~ /'"$voiture"'/ {$4='$nb'} {OFS="|";print}' liste.txt
par exemple. Voilà tout simplement. J'avais mis en fait un == au départ qui ne marchait pas et j'étais passé à autre chose!
Merci
a+
Je voulais modifier l'enregistrement (4ième champs) dont le modèle est 5008 et non affiché l'enregistrement dont le modele est 5008 ET le nb=5...
Ton exemple est donc correct et il fonctionne pour moi également!
Ce que j'avais (ajoute 1 au chiffre):
awk -F'|' '$2 ~ /'$voiture'/ {$4++} {OFS="|";print}' liste.txt >> listeT.txt
Ce que je voulais (ajoute x ou modifie le chiffre)
awk -F'|' '$2 ~ /'"$voiture"'/ {$4=$4+'$nb'} {OFS="|";print}' liste.txt
awk -F'|' '$2 ~ /'"$voiture"'/ {$4='$nb'} {OFS="|";print}' liste.txt
par exemple. Voilà tout simplement. J'avais mis en fait un == au départ qui ne marchait pas et j'étais passé à autre chose!
Merci
a+