Formule shell préfixe
Résolu
Benoit A.
Messages postés
455
Date d'inscription
Statut
Membre
Dernière intervention
-
Benoit A. Messages postés 455 Date d'inscription Statut Membre Dernière intervention -
Benoit A. Messages postés 455 Date d'inscription Statut Membre Dernière intervention -
Je relance un nouveau sujet qui est similaire à ma première question mais j'apporte un peu plus de précision.
Je reçois un fichier en format csv (emploi_fixe) sur mon serveur contenant x colonnes. Sachant que la première colonne (ID) contient un chiffre compris entre 1 et 192000 et qu'il n'y a aucune en-tête sur mon fichier.
Je cherche à créer une formule en shell (.sh) qui puisse me permettre d'ajouter la lettre "S" avant mon ID après la ligne 192000. Autrement dit je voudrais quand je reçois le fichier csv avec la ligne :
"192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
j'ai un autre fichier qui se créé (qui porterais le même nom) avec cette nuance :
"S192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
Ceci ne marche pas :
Auriez-vous une idée ??
Merci d'avance pour votre aide
Je reçois un fichier en format csv (emploi_fixe) sur mon serveur contenant x colonnes. Sachant que la première colonne (ID) contient un chiffre compris entre 1 et 192000 et qu'il n'y a aucune en-tête sur mon fichier.
Je cherche à créer une formule en shell (.sh) qui puisse me permettre d'ajouter la lettre "S" avant mon ID après la ligne 192000. Autrement dit je voudrais quand je reçois le fichier csv avec la ligne :
"192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
j'ai un autre fichier qui se créé (qui porterais le même nom) avec cette nuance :
"S192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
Ceci ne marche pas :
while IFS=';' read -r -k1 ID
do emploi_fixe ${ID//\"/} -gt 192000 && s=S || s=""
echo "\"$s$ID\";$ID"
done < emploi_fixe.prn
Auriez-vous une idée ??
Merci d'avance pour votre aide
2 réponses
-
Salut,
Il suffit d'adapter la syntaxe de dubcek donnée dans ton précédent post :
awk 'BEGIN{FS=OFS="\""} $2 <= 192000 { print } $2 > 192000 { $2="S"$2 ; print }' fichier > fichier_final-
-
Ben non, ici ton séparateur c'est le guillemet, du moins pour plus de facilité avec la commande awk :
$ cat fich
"191001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"191999";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"192000";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"192081";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"192501";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
$ awk 'BEGIN{FS=OFS="\""} $2 <= 192000 { print } $2 > 192000 { $2="S"$2 ; print }' fich
"191001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"191999";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"192000";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"S192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"S192081";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
"S192501";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999"; -
Et dernière petite question :
Est-ce que je peux faire quelque chose comme ça ? :cat emploi_fixe.full.prn | sort -u | sort -t\; -k1,1 -k2.8,2.11 -k2.5,2.6 -k2.2,2.3 ; awk 'BEGIN{FS=OFS="\""} $2 <= 192000 { print } $2 > 192000 { $2="S"$2 ; print }'> emploi_fixe.prn
Et idéalement je peux remplacer 192000 par une variable ? -
Est-ce que je peux faire quelque chose comme ça ? :
Oui, à condition de ne pas oublier de mettre un pipe avant le awk (et non un point virgule comme c'est le cas dans ton exemple) ;-(
Et idéalement je peux remplacer 192000 par une variable ?
Oui. Mais il faut déclarer ta variable dans awk :
awk -v VAR=192000 'BEGIN{FS=OFS="\""} $2 <= VAR...Ou-v VAR=${var_shell}si ta variable est déjà déclarée dans un script. -
-
-
ce sujet est un doublon de celui-ci, où j'ai dit que
-K1
n'est pas un nom de variable valide, et ce que je pense du «ça marche pas».