Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/09/2022, à 16:32

MixT

Match d'une sous chaine de caractere [bash, shell]

Bonjour à tous,


Je possede plusieurs fichiers dont certains doivent interagir ensemble s'il possede la meme sous chaine de caractere

Dans un répertoire je possède:

recepteur/
21.pdb
23.pdb
24.pdb

dans une autre répertoire je possède:

bank/
pose1.pdb
pose21.pdb
pose23.pdb

J'aimerais que chaque fois qu'il y a la même sous chaine de caractere executer la commande, par exemple :

programme  pose21.pdb  21.pdb
programme  pose23.pdb  23.pdb
for pose in bank/*.pdb ; do
    for recepteur in recepteur/*.pdb;do
       if [[ $pose == *"bab"* ]]; then # c'est apres le == que je ne vois plus trop quoi mettre
           programme  $pose  $recepteur
      fi 
   done 
done




Bonne journée,

Hors ligne

#2 Le 02/09/2022, à 17:25

MicP

Re : Match d'une sous chaine de caractere [bash, shell]

Bonjour

#!/bin/bash

for pose in bank/*.pdb ; do
    if test -f "recepteur/${pose/*\/pose/}"; then
      programme "$pose" "recepteur/${pose/*\/pose/}"
    fi
done

Dernière modification par MicP (Le 02/09/2022, à 17:29)

Hors ligne

#3 Le 02/09/2022, à 17:46

iznobe

Re : Match d'une sous chaine de caractere [bash, shell]

Bonjour , en bash , pour comparer des chaines de caracteres :

if [ "$pose" = "*bab*" ]; then # si tu recherche bab au milieu du reste des chaines / debut et fin .

il faut encadrer par des " les chaines voir par exemple https://www.delftstack.com/fr/howto/lin … s-in-bash/ pour plusieurs façons de faire .

Dernière modification par iznobe (Le 02/09/2022, à 17:48)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#4 Le 02/09/2022, à 17:50

MicP

Re : Match d'une sous chaine de caractere [bash, shell]

Ou alors :

if [[ $pose =~ bab ]]; then     # <=> Si la chaîne de caractère "bab" existe dans la chaîne de caractère qui a été assignée comme valeur à la variable nommée "pose"
michel@deb114x:~/aeff/mixt$ pose="nbnbnb_bab_jhgjhg"
michel@deb114x:~/aeff/mixt$ if [[ $pose =~ bab ]]; then echo "OK"; else echo "PAS ok"; fi
OK
michel@deb114x:~/aeff/mixt$ 
michel@deb114x:~/aeff/mixt$ pose="nbnbnb_bib_jhgjhg"
michel@deb114x:~/aeff/mixt$ if [[ $pose =~ bab ]]; then echo "OK"; else echo "PAS ok"; fi
PAS ok
michel@deb114x:~/aeff/mixt$ 

Dernière modification par MicP (Le 02/09/2022, à 18:11)

Hors ligne

#5 Le 02/09/2022, à 17:59

erresse

Re : Match d'une sous chaine de caractere [bash, shell]

Euh... Je vais peut-être passer pour un béotien, mais... c'est QUOI ce "*bab*" ???
Je pensais qu'il fallait tester la présence de 21 ou 23 dans un nom du genre pose21 ou pose23, d'où vient ce test de bab ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#6 Le 02/09/2022, à 18:09

MicP

Re : Match d'une sous chaine de caractere [bash, shell]

… Euh... Je vais peut-être passer pour un béotien, mais... c'est QUOI ce "*bab*" ??? …

Je me suis posé la même question,
alors j'ai envisagé le cas des chiffres, puis ensuite le cas de bab

Mais finalement, ce sera peut-être autre chose.

Ce qui fera pour l'instant (en me comptant dans la liste) : 2 béotiens  lol

Dernière modification par MicP (Le 02/09/2022, à 18:10)

Hors ligne

#7 Le 02/09/2022, à 18:10

iznobe

Re : Match d'une sous chaine de caractere [bash, shell]

@erresse  : deniere portion de code du 1er message du demandeur .
Mais pas plus d' idées non plus de ce que ca peut representer a part une chaine " xyz " .

Dernière modification par iznobe (Le 02/09/2022, à 18:11)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#8 Le 02/09/2022, à 18:47

MixT

Re : Match d'une sous chaine de caractere [bash, shell]

Il n'y a pas de bab, c'était pour l'exemple , c'est bien la correspondance de numéro qui doit être identique

S'il y a match du caractère "21" dans le deux noms

programme  pose21.pdb  21.pdb

S'il y a match du caractère "23" dans le deux noms

programme  pose23.pdb  23.pdb

Dernière modification par MixT (Le 02/09/2022, à 18:51)

Hors ligne

#9 Le 02/09/2022, à 19:02

erresse

Re : Match d'une sous chaine de caractere [bash, shell]

Tu devrais pouvoir t'en sortir comme ça :

for pose in bank/*.pdb ; do
    for recepteur in recepteur/*.pdb;do
       if [[ $pose =~ $(basename -s .pdb "$recepteur") ]]; then
           exécuter le programme adéquat
      fi 
   done 
done

Il y a sûrement moyen de faire mieux et plus performant, mais pour rester sur ton code initial...
Note : Le test [[ xxx =~ yy ]] signifie : si xxx contient yy alors le test est positif.

Dernière modification par erresse (Le 02/09/2022, à 19:04)


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#10 Le 02/09/2022, à 20:08

Watael

Re : Match d'une sous chaine de caractere [bash, shell]

iznobe a écrit :

Bonjour , en bash , pour comparer des chaines de caracteres :

if [ "$pose" = "*bab*" ]; then # si tu recherche bab au milieu du reste des chaines / debut et fin .

euh, non.

$ test "mlkpoimlk" = "*poi*"; echo $?
1

non plus

$ [ "mlkpoimlk" = "*poi*" ]; echo $?
1

toujours pas

$ [[ "mlkpoimlk" = "*poi*" ]]; echo $?
1

ah, oui !

$ [[ mlkpoimlk == *poi* ]]; echo $?
0

il faut encadrer par des " les chaines voir par exemple https://www.delftstack.com/fr/howto/lin … s-in-bash/ pour plusieurs façons de faire .

le lien montre =~ pour trouver une sous-chaîne.

Dernière modification par Watael (Le 02/09/2022, à 20:10)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 02/09/2022, à 20:31

MicP

Re : Match d'une sous chaine de caractere [bash, shell]

Dans son message #8, MixT a écrit :

…c'est bien la correspondance de numéro qui doit être identique …

Alors, si les noms de répertoires et les noms des fichiers que tu as donné correspondent au contexte,
le script que j'ai proposé dans mon message #2 fera ce que tu demandais.

michel@deb114x:~/aeff/mixt$ ls -lR
.:
total 12
drwxr-xr-x 2 michel michel 4096  2 sept. 16:58 bank
drwxr-xr-x 2 michel michel 4096  2 sept. 16:57 recepteur
-rwxr--r-- 1 michel michel  161  2 sept. 17:28 script.sh

./bank:
total 0
-rw-r--r-- 1 michel michel 0  2 sept. 16:58 pose1.pdb
-rw-r--r-- 1 michel michel 0  2 sept. 16:58 pose21.pdb
-rw-r--r-- 1 michel michel 0  2 sept. 16:58 pose23.pdb

./recepteur:
total 0
-rw-r--r-- 1 michel michel 0  2 sept. 16:57 21.pdb
-rw-r--r-- 1 michel michel 0  2 sept. 16:57 23.pdb
-rw-r--r-- 1 michel michel 0  2 sept. 16:57 24.pdb
michel@deb114x:~/aeff/mixt$ 
michel@deb114x:~/aeff/mixt$ cat script.sh 
#!/bin/bash

for pose in bank/*.pdb ; do
    if test -f "recepteur/${pose/*\/pose/}"; then
      echo programme "$pose" "recepteur/${pose/*\/pose/}"
    fi
done
michel@deb114x:~/aeff/mixt$ 
michel@deb114x:~/aeff/mixt$ ./script.sh 
programme bank/pose21.pdb recepteur/21.pdb
programme bank/pose23.pdb recepteur/23.pdb
michel@deb114x:~/aeff/mixt$ 

Dernière modification par MicP (Le 02/09/2022, à 20:41)

Hors ligne

#12 Le 02/09/2022, à 21:34

MixT

Re : Match d'une sous chaine de caractere [bash, shell]

Je suis désolée

MicP 17h25  et erresse 19h02 s'il existe 1.pdb et 21.pdb, il l’exécute tout de même sur 1.pdb

Dernière modification par MixT (Le 02/09/2022, à 21:42)

Hors ligne

#13 Le 02/09/2022, à 23:09

MicP

Re : Match d'une sous chaine de caractere [bash, shell]

Alors il va falloir que tu reformules ta demande,
car :

Dans son message #1, MixT a écrit :

… J'aimerais que chaque fois qu'il y a la même sous chaine de caractere executer la commande, par exemple :

programme  pose21.pdb  21.pdb
programme  pose23.pdb  23.pdb

Alors j'ai tenu compte de ta demande, et en fonction des listes que tu as données dans ton premier message,
mon script retournait :

programme bank/pose21.pdb recepteur/21.pdb
programme bank/pose23.pdb recepteur/23.pdb

et bien sûr, si recepteur/1.pdb ET seulement si bank/pose1.pdb étaient tous les deux présents,
alors il y aurait eu :

programme bank/pose1.pdb recepteur/1.pdb

=======
Pour coller un peu mieux à la demande,
on peut enlever les chemins des fichiers en reformulant le script comme ça :

michel@deb114x:~/aeff/mixt$ cat script.sh 
#!/bin/bash

for pose in bank/*.pdb; do
    if test -f "recepteur/${pose/*\/pose/}"; then
      echo programme  "${pose##*/}"  "${pose/*\/pose/}"
    fi
done
michel@deb114x:~/aeff/mixt$ 

ce qui donnera, avec les listes données dans ton premier message :

programme  pose21.pdb  21.pdb
programme  pose23.pdb  23.pdb

=======
Mais tu dis maintenant dans ton dernier message :

Dans son message #12, MixT a écrit :

Je suis désolée

MicP 17h25  … s'il existe 1.pdb … il l’exécute tout de même sur 1.pdb

alors je ne comprends pas très bien ce que tu voudrais obtenir

Dernière modification par MicP (Le 03/09/2022, à 08:57)

Hors ligne

#14 Le 02/09/2022, à 23:22

MixT

Re : Match d'une sous chaine de caractere [bash, shell]

Par exemple de manière générale

programme pose1.pdb 1.pdb
programme  pose21.pdb  21.pdb
programme  pose23.pdb  23.pdb
programme pose100.pdb 100.pdb 

Dernière modification par MixT (Le 02/09/2022, à 23:22)

Hors ligne

#15 Le 02/09/2022, à 23:27

MicP

Re : Match d'une sous chaine de caractere [bash, shell]

C'est le même script que le dernier que j'ai donné,
j'ai juste passé en variables certaines chaînes de caractères
pour que tu puisses, éventuellement, les adapter plus facilement au contexte.

michel@deb114x:~/aeff/mixt$ cat ./script.sh 
#!/bin/bash

prefix="pose"
extension="pdb"

repSrc="bank"
repCible="recepteur"

for fich in "$repSrc"/*."$extension"; do
    if test -f "$repCible/${fich/*\/$prefix/}"; then
      echo programme "${fich##*/}" "${fich/*\/$prefix/}"
    fi
done
michel@deb114x:~/aeff/mixt$ 
michel@deb114x:~/aeff/mixt$ find . -name '*.pdb' | sort
./bank/pose100.pdb
./bank/pose1.pdb
./bank/pose21.pdb
./bank/pose23.pdb
./bank/pose3.pdb
./recepteur/100.pdb
./recepteur/1100.pdb
./recepteur/1.pdb
./recepteur/21.pdb
./recepteur/23.pdb
./recepteur/24.pdb
michel@deb114x:~/aeff/mixt$ 
michel@deb114x:~/aeff/mixt$ ./script.sh 
programme  pose100.pdb  100.pdb
programme  pose1.pdb  1.pdb
programme  pose21.pdb  21.pdb
programme  pose23.pdb  23.pdb
michel@deb114x:~/aeff/mixt$ 

Dernière modification par MicP (Le 02/09/2022, à 23:52)

Hors ligne

#16 Le 03/09/2022, à 07:57

noje

Re : Match d'une sous chaine de caractere [bash, shell]

Même si le script de MicP fonctionne, hormis l'omission des dossiers racine des fichiers "bank" "recepteur" qui vont générer des messages d'erreurs. 

Je me suis permis de faire un script également, avec une procédure de contrôle des fichiers (selon l'importance elle peut-être sauter et également possibles de la commenter pour ne plus la voir).
À la fin le script propose de lancer une boucle de toutes les commandes sur les fichiers aux valeurs numériques correspondantes.

Il suffit de lire les commentaires les lignes qui commencent par # (je le précise sait-on jamais), pour comprendre et modifier celui-ci.

#!/usr/bin/env bash

# Créer les fichiers temporaires.
d1=$(mktemp)
d2=$(mktemp)
d3=$(mktemp)



# Sortir les fichiers en classement selon valeur numérique, fait un assemblage.  
# Efface toutes les valeurs orphelines.

ls bank/* | sort -V >$d1 && ls recepteur/* | sort -V >$d2 
paste -d, $d1 $d2 | sed "/^,recepteur..*.pdb$/d;s/,/\ /;s/^/programme\ /" >$d3

# Pour tous dossiers différents, remplacés.
# "bank"
# "recepteur" 
# Pour changer le programme, remplacer.
# "programme" : pour programme bien laissé \ /.


# Contrôle, juste pour faire un contrôle selon importance des données. 
# Commenter  de « read -p " » à « [reponse = "oui" ]] &&less -Xm $d3 », si pas nécessaire.
# Commenter = ajouter # devant comme cette ligne..

read -p " 
#########################################################

Pour voir le fichier avant traitement tapez \"oui\".
Pour continuer taper \"entrée sans rien\".

#########################################################

--------------------------------------------------------
TOUCHE DE COMMANDES NAVIGATION & SORTIE DU FICHIER :  

ctrl+d = page suivante 
k = haut 
j = bas 
q = sorti et continuer le script 
G = fin de page 
gg = début de page 

(les flèches et page up et page down,  sont aussi valables). 

--------------------------------------------------------

réponse (oui / entrée ) : " reponse 

[[ $reponse = "oui" ]] && less -Xm $d3 



# Déclaration de la fonction pour faire la boucle, fonction « do_the_loop ». 

do_the_loop()
{
while read i 
do 
	$i
done<$d3
}



# Exécuté en boucle :
# programme bank/posexxx.pdb recepteur/xxx.pdb

clear
echo 
read -p "Lancez toutes les commandes en loop tapez \"oui\" ou entrée pour quitter sans lancer  : " reponse 
[[ $reponse = "oui" ]] && do_the_loop || exit 

# Nettoyer les fichiers temporaires.
rm $d1
rm $d2
rm $d3

- LTS 18.04 & 22.04 - jwm - cwm - zsh

Les seules vraies erreurs sont celles que nous commettons à répétition.
Les autres sont des occasions d'apprentissage. (Dalaï Lama)

Hors ligne

#17 Le 03/09/2022, à 08:21

MicP

Re : Match d'une sous chaine de caractere [bash, shell]

noje a écrit :

… hormis l'omission des dossiers racine des fichiers "bank" "recepteur" qui vont générer des messages d'erreurs.  …

Voir les messages de MixT, ne serait-ce que son dernier message dans lequel il n'y a que les noms de fichiers <=> il ne demande pas que le chemin absolu ou relatif des fichiers concernés soit spécifié,
et dans lesquels le nom du programme qui sera utilisé n'est pas non plus spécifié, ce qui ne permet pas de savoir si un message d'erreur sera ou ne sera pas généré par ce programme.

Dernière modification par MicP (Le 03/09/2022, à 08:58)

Hors ligne

#18 Le 03/09/2022, à 09:14

noje

Re : Match d'une sous chaine de caractere [bash, shell]

Dans l’expectative et même en relisant les messages, la demande n’est vraiment pas claire.
Aussi bien que tes précisions sur une attente de ne pas avoir de chemin absolu (j'ai pas lu un message de MixT, disant ça doit être générale, il exprime juste : programme foo1 foo2).

Après pourquoi parler de dossiers dans le message initial de la demande, si ce n'est pour ne pas les utiliser.
La réponse à mettre en œuvre pour l'exécution finale, entre deux dossiers distincts, et un dossier unique est différente.

D'ailleurs si je prends ton script en gardant les dossiers.
Que je change programme (inconnu) pour « cat » après avoir rentré "toto" dans chaque fichier :

./script.sh >test.sh && chmod 755 test.sh 
bash test.sh 
cat: pose100.pdb: Aucun fichier ou dossier de ce type
cat: 100.pdb: Aucun fichier ou dossier de ce type
cat: pose1.pdb: Aucun fichier ou dossier de ce type
cat: 1.pdb: Aucun fichier ou dossier de ce type
cat: pose21.pdb: Aucun fichier ou dossier de ce type
cat: 21.pdb: Aucun fichier ou dossier de ce type
cat: pose23.pdb: Aucun fichier ou dossier de ce type
cat: 23.pdb: Aucun fichier ou dossier de ce type

Petite question aussi pourquoi à tu mis une condition test pour voir si il y a des fichiers .pdb, elle ne sert à rien.
Car ce n’est pas dans la demande, s’il faut répondre à cette demande, que nous ne connaissons pas vraiment  d'ailleurs.

Si jamais donc, tu peux l'enlever tu verras le résultat est identique et tu économises aussi le "fi". 

#if test -f "$repCible/${fich/*\/$prefix/}"; then
#fi

Dernière modification par noje (Le 03/09/2022, à 09:18)


- LTS 18.04 & 22.04 - jwm - cwm - zsh

Les seules vraies erreurs sont celles que nous commettons à répétition.
Les autres sont des occasions d'apprentissage. (Dalaï Lama)

Hors ligne

#19 Le 03/09/2022, à 12:34

Watael

Re : Match d'une sous chaine de caractere [bash, shell]

si tu ne sais pas où est bash (il n'y a d'ailleurs aucune raison qu'il ne soit pas sous /bin : c'est un shell, il doit être disponible très rapidement dans le démarrage du système), comment peux-tu être sûr de l'endroit où est env !?

je rechigne à utiliser ls dans un script, autrement que pour afficher le contenu d'un répertoire; en tout cas, je ne parcours jamais sa sortie, mais tu pourrais te dispenser de fichiers temporaires :

#!/bin/bash

paste -d  ','  <(ls bank/ | sort -V) <(ls recepteur/ | sort -V) \
    | sed '/^,recepteur..*.pdb$/d;s/,/\ /;s/^/programme\ /' \
    | less

Dernière modification par Watael (Le 03/09/2022, à 12:36)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#20 Le 03/09/2022, à 12:45

Tawal

Re : Match d'une sous chaine de caractere [bash, shell]

Ou en 1 seule boucle :

$ ls -l *
bank:
total 0
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 pose1.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 pose3.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 pose21.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 pose23.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 pose100.pdb

recepteur:
total 0
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 1.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 21.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 23.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 24.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 100.pdb
-rw-r--r-- 1 tawal tawal 0  3 sept. 12:21 1100.pdb
$ 
$ for f in ./bank/*; do [[ $f =~ [0-9]+.pdb$ ]] && [ -f ./recepteur/"${BASH_REMATCH[*]}" ] && echo programme "$f" ./recepteur/"${BASH_REMATCH[*]}"; done

programme ./bank/pose100.pdb ./recepteur/100.pdb
programme ./bank/pose1.pdb ./recepteur/1.pdb
programme ./bank/pose21.pdb ./recepteur/21.pdb
programme ./bank/pose23.pdb ./recepteur/23.pdb
$

Edit:
Amélioration de la commande + présentation différente ci-dessous :

for f in ./bank/*
do
   if [[ $f =~ [0-9]+.pdb$ ]] && [ -f ./recepteur/"${BASH_REMATCH[*]}" ]
   then
      echo programme "$f" ./recepteur/"${BASH_REMATCH[*]}"
   fi
done

Dernière modification par Tawal (Le 03/09/2022, à 13:04)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#21 Le 03/09/2022, à 13:00

Watael

Re : Match d'une sous chaine de caractere [bash, shell]

c'est bien mieux en effet.
d'ailleurs (j'ai oublié de le dire), la proposition de noje ne permet pas d'exécuter "programme" sur la liste des fichiers.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#22 Le 03/09/2022, à 13:08

Tawal

Re : Match d'une sous chaine de caractere [bash, shell]

Merci Watael, cela fait plaisir de ta part smile


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#23 Le 03/09/2022, à 18:01

noje

Re : Match d'une sous chaine de caractere [bash, shell]

Watael a écrit :

si tu ne sais pas où est bash

Si la commande whereis va l'indiquer à 100% à /bin/bash sur n'importe quel Ubuntu, après il y a l'école de la portabilité qui dit que env est mieux dans l’expectative que le script soit exécuté sous un autre système que le sien.

Watael a écrit :

je rechigne à utiliser ls dans un script, autrement que pour afficher le contenu d'un répertoire; en tout cas, je ne parcours jamais sa sortie, mais tu pourrais te dispenser de fichiers temporaires :

Idem, une manière de voir la chose, je connais un gars qui code c’est propre outils en C et en assembleur et qui n’utilise aucune commande système directement.
Après l’idée est d’avoir un fichier pour lancer une boucle avec read, mais j’attends une contre-proposition complète, c’est toujours sympa de voir une version plus efficiente que la sienne, ont apprends…

Watael a écrit :

d'ailleurs (j'ai oublié de le dire), la proposition de noje ne permet pas d'exécuter "programme" sur la liste des fichiers.

La bonne blague, je me demande si tu as tout copié ou si tu la lances correctement, ou c'est une blague, c'est une allusion au fait que programme est nulle part....

Si jamais j'ai testé ton bout de code ci-dessous et ta proposition ne permet pas non plus de lancer : programme sur la liste des fichiers.

#!/bin/bash

paste -d  ','  <(ls bank/ | sort -V) <(ls recepteur/ | sort -V) \
    | sed '/^,recepteur..*.pdb$/d;s/,/\ /;s/^/programme\ /' \
    | less

- LTS 18.04 & 22.04 - jwm - cwm - zsh

Les seules vraies erreurs sont celles que nous commettons à répétition.
Les autres sont des occasions d'apprentissage. (Dalaï Lama)

Hors ligne

#24 Le 03/09/2022, à 18:23

Watael

Re : Match d'une sous chaine de caractere [bash, shell]

ah, oui. oops! j'ai zappé la fonction inutile do_the_loop.

le code que je donne vise uniquement à te montrer que les fichiers temporaires sont inutiles (au moins deux, puisque tu réutilises le troisième dans un boucle inutile au lieu de l'appeler avec xargs).

quand je vois ta tartine, et les codes simples et élégants de MicP et Tawal, je n'hésite pas.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#25 Le 03/09/2022, à 18:37

noje

Re : Match d'une sous chaine de caractere [bash, shell]

Demander à quelqu’un de pousser une pierre (vous aurez 10000 méthodes différentes).

Tu n’expliques en rien et n’argumentes toujours pas,  en quoi mon script ne fonctionne pas sinon ?
Juste pour m'améliorer, comme ça, où 'c’était un bon vieux trolling ?? non !!.


Comme tu n’as pas donné la solution « sur une ligne » et j’ai respecté la thématique, ça affiche « programme posexxx.pdb xxx.pdb :

bash <(echo $(paste -d, <(ls recepteur/) <(ls bank/) | sort -V) | fmt -w10 |sed "s/,/\ /;s/^/echo  Programme /") 

Ah également...

^,recepteur..*.pdb$/d

Inutile, ne sert à rien le résultat est identique d’ailleurs tu ne traites que recepteur et pas bank, comme la syntaxe de ls est identique, ce n’est pas logique..
Et ce n’est pas élégant si l’objectif est le minimalisme extrême, comme semble être ton cas…

Dernière modification par noje (Le 03/09/2022, à 19:01)


- LTS 18.04 & 22.04 - jwm - cwm - zsh

Les seules vraies erreurs sont celles que nous commettons à répétition.
Les autres sont des occasions d'apprentissage. (Dalaï Lama)

Hors ligne