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 07/04/2020, à 17:35

judkil

BASH, Lister fichiers par leurs versions

Bonjour !

Est-ce que quelqu'un aurait une idée de comment trier des fichiers en fonction de leur version de fin avec un ls . J'ai essayé avec un

ls -R -t

mais cela ne fonctionne pas correctement

Input

AB-00017938-1_r264.mol2
AB-00058387-1_r271.mol2
AB-00024683-6_r265.mol2
Fr-PPIchem_05919-1_r266.mol2
Fr-PPIchem_09462-1_r263.mol2
AB-00047041-1_r267.mol2
AB-00060649-2_r268.mol2
AB-00067275-1_r269.mol2
AB-00027368-10_r270.mol2

Output

Fr-PPIchem_09462-1_r263.mol2
AB-00017938-1_r264.mol2
AB-00024683-6_r265.mol2
Fr-PPIchem_05919-1_r266.mol2
AB-00047041-1_r267.mol2
AB-00060649-2_r268.mol2
AB-00067275-1_r269.mol2
AB-00027368-10_r270.mol2
AB-00058387-1_r271.mol2

Merci beaucoup !

Dernière modification par judkil (Le 07/04/2020, à 17:37)

Hors ligne

#2 Le 07/04/2020, à 17:37

ar barzh paour

Re : BASH, Lister fichiers par leurs versions

qu'appelles-tu "version de fin" ?
(comment le repérer s'il a des caractéristiques précises)

Dernière modification par ar barzh paour (Le 07/04/2020, à 17:38)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#3 Le 07/04/2020, à 17:38

judkil

Re : BASH, Lister fichiers par leurs versions

en fonction du 

XXXXXXXXX_r***.mol2

Dans le fichier input les fichiers sont listés dans " le désordre", dans le fichier output les fichiers sont listés en regardant la fin

Dernière modification par judkil (Le 07/04/2020, à 17:42)

Hors ligne

#4 Le 07/04/2020, à 18:34

pingouinux

Re : BASH, Lister fichiers par leurs versions

Bonjour,
Voici une suggestion en python :

$ cat tri.py
#!/usr/bin/env python3
import re, glob
fichiers=glob.glob('*.mol2')
def cle(f): k=re.search('_r(\d+)\.mol2',f); return k.groups()
fichiers.sort(key=cle)
for f in fichiers: print(f)

à appeler à partir du répertoire qui contient les fichiers :

./tri.py >output

Ajouté :
Si les nombres servant au tri n'ont pas tous le même nombre de chiffres, utiliser cette version :

#!/usr/bin/env python3
import re, glob
fichiers=glob.glob('*.mol2')
def cle(f): k=re.search('_r(\d+)\.mol2',f); return int(k.groups()[0])
fichiers.sort(key=cle)
for f in fichiers: print(f)

Dernière modification par pingouinux (Le 07/04/2020, à 21:53)

Hors ligne

#5 Le 08/04/2020, à 09:08

ar barzh paour

Re : BASH, Lister fichiers par leurs versions

je pensais trouver uniquement avec find mais je n'y arrive pas , j'ai été obligé d'utiliser un fichier intermédiaire
à mettre dans le répertoire courant
que j'ai appelé f.sh

cat f.sh
#! /bin/bash
printf "%s %s\0"  ${1##.*_r} "${1:2}"

puis à lancer dans le répertoire où se trouvent les fichiers

2>/dev/null find . -name "*.mol2" -exec bash ./f.sh '{}' \; |sort -z -k1,1|cut -z -d ' ' -f2-|xargs -0 -I _ echo _
Fr-PPIchem_09462-1_r263.mol2
AB-00017938-1_r264.mol2
AB-00024683-6_r265.mol2
Fr-PPIchem_05919-1_r266.mol2
AB-00047041-1_r267.mol2
AB-00060649-2_r268.mol2
AB-00067275-1_r269.mol2
AB-00027368-10_r270.mol2
AB-00058387-1_r271.mol2

et en rendant le fichier f.sh exécutable simplifier un peu

2>/dev/null find . -name "*.mol2" -exec ./f.sh '{}' \; |sort -z -k1,1|cut -z -d ' ' -f2-|xargs -0 -I _ echo _

Dernière modification par ar barzh paour (Le 08/04/2020, à 09:22)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#7 Le 08/04/2020, à 17:01

ar barzh paour

Re : BASH, Lister fichiers par leurs versions

@nanny , j'étais tout confu mais non

ls *.mol2 |sort -t'-' -k3,3
AB-00027368-10_r270.mol2
Fr-PPIchem_09462-1_r263.mol2
AB-00017938-1_r264.mol2
Fr-PPIchem_05919-1_r266.mol2
AB-00047041-1_r267.mol2
AB-00067275-1_r269.mol2
AB-00058387-1_r271.mol2
AB-00060649-2_r268.mol2
AB-00024683-6_r265.mol2

PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#9 Le 08/04/2020, à 17:23

kamaris

Re : BASH, Lister fichiers par leurs versions

@ar barzh paour, #5 : pour ton script, tu peux faire

find . -name '*.mol2' -exec bash -c 'printf "%s %s\0" "${1##.*_r}" "${1:2}"' _ '{}' \; | …

Mais bon, c'est dommage, car tu romps la chaine des flux avec un traitement des arguments un par un (et utiliser la forme -exec {} + de find n'est pas évident ici).
Il vaudrait mieux passer une sortie -print0 de find à sed :

find . -name '*.mol2' -print0 | sed -zE 's/.*_r([0-9]+).*/\1 &/' | sort -z -k1n | cut -z -d' ' -f2- | xargs -0 printf '%s\n'

Dernière modification par kamaris (Le 08/04/2020, à 17:27)

Hors ligne

#10 Le 09/04/2020, à 08:50

ar barzh paour

Re : BASH, Lister fichiers par leurs versions

kamaris a écrit :

car tu romps la chaine des flux avec un traitement des arguments un par un

oui sans doute , mais je ne maîtrise pas ces infos
ce qui me manquait en plus c'était

 sed -zE 's/.*_r([0-9]+).*/\1 &/' 

je note

@nany
j'ai une mauvaise vue , en principe je fais un copier coller mais

judkil a écrit :

XXXXXXXXX_r***.mol2


@judkill
je pense tu pourrais passer sa discussion en Résolu
modifier le titre du post 1 remplacer
BASH, Lister fichiers par leurs versions
par
[Résolu]  BASH, Lister fichiers par leurs versions

merci

Dernière modification par ar barzh paour (Le 09/04/2020, à 08:59)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne