#1 Le 07/04/2020, à 16: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, à 16:37)
Hors ligne
#2 Le 07/04/2020, à 16: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, à 16:38)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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, à 16: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, à 16:42)
Hors ligne
#4 Le 07/04/2020, à 17: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, à 20:53)
Hors ligne
#5 Le 08/04/2020, à 08: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, à 08:22)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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
#6 Le 08/04/2020, à 09:17
- nany
Re : BASH, Lister fichiers par leurs versions
Bonjour,
ls … | sort -t'-' -k3.3
?
Hors ligne
#7 Le 08/04/2020, à 16: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 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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
#8 Le 08/04/2020, à 16:12
- nany
Re : BASH, Lister fichiers par leurs versions
Point, pas virgule.
Hors ligne
#9 Le 08/04/2020, à 16: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, à 16:27)
Hors ligne
#10 Le 09/04/2020, à 07:50
- ar barzh paour
Re : BASH, Lister fichiers par leurs versions
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
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, à 07:59)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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