Découper une chaine de caractère en shell [Résolu/Fermé]

Signaler
-
 azahiri -
Bonjour,

J'ai un répertoire contenant des fichiers avec cette nomenclature :

00000_CODE_PROJ_NS_0000000000_0000000000.ext "CODE peut prendre plusieurs valeurs, j'ai une dizaines de fichiers comme ça"
00000_CODE_SUFIX_PROJ_NS_0000000000_0000000000.ext "CODE peut prendre plusieurs valeurs, j'ai à peu prés 3 fichiers comme ça"

J'aimerai faire un ls en récupérant seulement le pour "00000_CODE_PROJ_NS_0000000000_0000000000.ext" et le CODE_SUFIX pour "00000_CODE_SUFIX_PROJ_NS_0000000000_0000000000.ext".

Mes compétences en shell s'arrêtent dans l'affichage du CODE seulement, j'ai fait :

ls * | cut -c7- | cut -d "_" -f1


J'aimerai une commande qui m'affiche à la fois CODE et CODE_SUFIX.

Pourriez vous m'aider ?

Merci d'avance.

4 réponses

Messages postés
35915
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 690
Salut,

"CODE peut prendre plusieurs valeurs
Genre... Numérique ? Alphabétique ? Alphanumérique ? Autres ?
Il peut prendre Alphabétique "et CODE_SUFIX" aussi.
Messages postés
35915
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 690
$ ls -1
00000_CODE_PROJ_NS_0000000000_0000000000.ext
00000_CODE_SUFIX_PROJ_NS_0000000000_0000000000.ext

$ ls | awk 'BEGIN { FS=OFS="_";} {if ($3 ~ /SUFIX/)  print $2,$3;  else print $2 }'
CODE
CODE_SUFIX

Messages postés
20233
Date d'inscription
mercredi 18 avril 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
1 535
j'ai peut-être mal compris la demande, mais j'ai comme eu l'impression que 'SUFIX' n'est pas figé, du coup j'aurais conditionné sur NF plutôt que sur l'existence de SUFIX

PS : merci de m'avoir fait chercher OFS... tu le croirais si je te disais que je rajoutais les séparateur de sortie directement en texte
Messages postés
35915
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 690
Effectivement, merci ;-))

$ ls | awk 'BEGIN { FS=OFS="_";} {if ($5 ~ /[[:alpha:]]/)  print $2,$3;  else print $2 }'
CODE
CODE_SUFIX
Messages postés
20233
Date d'inscription
mercredi 18 avril 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
1 535
pas mal, vérifier que le 5 champs est alpha plutôt que de vérifier le nombre total...
C'est plus sur...
(pourquoi faire simple quand on peut faire compliqué :))
Bonjour,

Merci de vos réponses. J'ai toutefois trouvé une solution en cherchant un peu du awk "parsing". Voici la commande qui marche bien :

Code :
Sélectionner tout - Visualiser dans une fenêtre à part

ls * | awk -F_ '{if($3 != "PROJ") {print $2"_"$3;} else if($3 == "PROJ") print $2;}'


Cordialement.