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.

#1976 Le 11/04/2021, à 13:09

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Tawal a écrit :

Mais quid de la soustraction ?

$ shopt -s extglob
$ Tab3=( $( printf '%s\n' "${Tab2[@]//@($(IFS='|';echo "${Tab1[*]}"))/}") )

?

là, l'assignation de Tab3 fonctionne parce que les éléments sont insécables.
si ce n'était pas le cas, il faudrait itérer sur le résultat.


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

Hors ligne

#1977 Le 11/04/2021, à 14:04

Tawal

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Incroyable !
Mais pas étonnant de ta part smile

Si je comprends bien, tu développes les éléments de Tab1 en expression régulière (avec le IFS) pour la substitution (par rien) dans les éléments de Tab2.

Est-ce que ça résiste à tous caractères ? Aux noms de fichiers, par exemple ? Aux espaces ?
Tu as l'air de dire non pour les espaces.

Super, c'est plus concis et plus rapide que ma méthode.

Merci de ton intervention wink


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

#1978 Le 11/04/2021, à 14:56

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

il ne s'agit pas d'expression régulière. il s'agit de correspondance de motifs (Pattern matching, aka. globbing) étendu (extglob).

pour du nom de fichier, je ferais plutôt une boucle comportant une fonction isInArray :

isInArray()
{
   local item=$1
   shift
   rgx="^($(IFS='|'; echo "$*"))$" #là, c'est une regex.
   [[ $item =~ $rgx ]]
}

Dernière modification par Watael (Le 11/04/2021, à 14:56)


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

Hors ligne

#1979 Le 11/04/2021, à 15:16

Tawal

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Oui, je confonds.
Je voulais dire, tu développes en

Tab1[0]|Tab1[1]|....|Tab[n]

pour la substitution.

Ingénieux le code retour de la fonction smile

Edit:
Je note pour le extglob; j'ai beau lire le man bash, il y a beaucoup à assimiler ...

Merci encore.

Dernière modification par Tawal (Le 11/04/2021, à 15:22)


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

#1980 Le 12/04/2021, à 09:57

jlfh0816

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

thib1984 a écrit :

PS : c'est un projet perso, vos retours sont donc les bienvenus!

Ca fonctionne très bien sur ma Xubuntu-Voyager 18.04 à condition que je l'installe avec pip3 (voir le post-scriptum) :

pip3 install ytdlmusic

Merci beaucoup pour ton travail, ytdlmusic est simple et agréable à utiliser, il a tout pour me plaire !  big_smile



PS: juste pour info et si ça peut être utile, ytdlmusic ne fonctionne pas si je l'installe avec la ligne :

pip install ytdlmusic

car ça me retourne le message d'erreur suivant :

jlfh0816 @ Voyager1804  ~
└─ $ ▶ ytdlmusic "the beatles" "let it be"
Traceback (most recent call last):
  File "/home/jlfh0816/.local/bin/ytdlmusic", line 7, in <module>
    from ytdlmusic.__ytdlmusic__ import ytdlmusic
ImportError: No module named ytdlmusic.__ytdlmusic__

Ne connaissant rien du tout à python, je n'ai pas pu résoudre l'erreur. Mais bon, ce n'est pas grave puisque ça a fini par fonctionner en installant avec pip3 plutôt qu'avec pip ... c'est bien l'essentiel !

Dernière modification par jlfh0816 (Le 12/04/2021, à 09:58)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#1981 Le 12/04/2021, à 11:46

thib1984

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Merci pour ton retour, je vais ouvrir une issue et tenter de la corriger ce soir (j'ai reproduit sur une vm en ligne, du coup j'ai fait une première étape).
Edit : le souci vient d'une incompatibilité avec python 2 d'une des dépendances, du coup je vais mettre à jour la documentation pour préciser que mon application est compatible uniquement avec python3

Dernière modification par thib1984 (Le 12/04/2021, à 12:58)

Hors ligne

#1982 Le 13/04/2021, à 11:59

thib1984

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@jlfh0816

Je te confirme que le package n'est pas compatible avec python2. J'ai par contre apporté quelques corrections et nouvelles options.

pip3 install --upgrade ytdlmusic

(une fois)

Et ensuite tu as deux nouvelles commandes d'administration

ytdlmusic version

pour afficher toutes les versions

ytdlmusic update

pour mettre à jour le package et ses dépendances, cela peut etre utile car youtube-dl est constamment mis à jour smile

Encore merci de tes retours!

Hors ligne

#1983 Le 13/04/2021, à 14:03

jlfh0816

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@thib1984
Après avoir mis à jour avec succès le package et ses dépendances, voici le retour de la demande d'affichage de la version :

jlfh0816 @ Voyager1804  ~
└─ $ ▶ ytdlmusic version
ytdlmusic version             : 0.3.1
youtube-search-python version : 1.4.3
youtube-dl version            : 2021.4.7
pip(3) version                : 9.0.1
python version                : 3.6.9 (default, Jan 26 2021, 15:33:00) [GCC 8.4.0]
ffmpeg                        : /usr/bin/ffmpeg

Tout s'est donc bien passé et a priori, même youtube-dl a été mis à jour.
Merci beaucoup pour ta réactivité et encore bravo pour ton application !  smile

Juste un petit dernier mot : une fois ton application installée, la mise à jour de youtube-dl ne peut plus se faire que par son intermédiaire puisque lorsqu'on tente de la faire isolément et manuellement, on a ce message d'avertissement :

jlfh0816 @ Voyager1804  ~
└─ $ ▶ youtube-dl -U
It looks like you installed youtube-dl with a package manager, pip, setup.py or a tarball. Please use that to update.

Peut-être faut-il en avertir l'utilisateur lambda lorsqu'il installe ton application, histoire qu'il ne soit pas surpris ?

Dernière modification par jlfh0816 (Le 13/04/2021, à 14:03)


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#1984 Le 13/04/2021, à 15:58

thib1984

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@jlfh0816

Bonne remarque. J'ai essayé de comprendre, je ne pense pas que ce soit bloquant ou réellement génant (si je comprends bien tu aurais eu un autre message d'erreur meme sans l'upgrade forcé), du coup j'ai mis à jour la documentation :
https://github.com/thib1984/ytdlmusic#faq

Merci de tes retours, ca fait très plaisir de savoir que son application est utilisée !

Edit : je pense que tu as raison, je vais ajouter un y/n à l'update avec un message de prévention, en proposant deux options : update (seulement le package ytdlmusic) et full-update (package ytdlmusic et depéndances).

Tu en penses quoi?

Dernière modification par thib1984 (Le 13/04/2021, à 18:08)

Hors ligne

#1985 Le 13/04/2021, à 18:39

jlfh0816

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

thib1984 a écrit :

...  je vais ajouter un y/n à l'update avec un message de prévention, en proposant deux options : update (seulement le package ytdlmusic) et full-update (package ytdlmusic et depéndances).

Ah oui, si tu peux proposer le choix  "update de seulement ytdlmusic"  ou  "update ytdlmusic + dépendances" , je pense que ça serait bienvenu.
Avec une option d'update aussi explicite, chacun s'y retrouvera, même un débutant.


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#1986 Le 13/04/2021, à 19:32

thib1984

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

C'est fait smile

~ ytdlmusic version
ytdlmusic version             : 0.4.4
youtube-search-python version : 1.4.3
youtube-dl version            : 2021.4.7
pip(3) version                : 21.0.1
python version                : 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]
ffmpeg                        : NON INSTALLE


~ ytdlmusic help  

    NAME
        ytdlmusic

    SYNOPSIS
       With ytdlmusic, you can download from youtube a mp3 or ogg music without use browser. 5 choices are available with small summary 
       to facilitate the choice. You can also use auto mode to download the first item. 

        help            : display this help
                        -> ytdlmusic help
        update          : upgrade ytdlmusic
                        -> ytdlmusic update   
        full-update     : upgrade youtube-dl, youtube-search-python and ytdlmusic
                        -> ytdlmusic full-update                                                   
        version         : display versions of ytdlmusic and his dependencies
                        -> ytdlmusic version                         
        artist song     : display 5 choices from youtube with given search, then download the mp3 or ogg choosen by user
                        -> example : ytdlmusic "the beatles" "let it be"
        artist song auto: download mp3 or ogg of the first from youtube with given search
                        -> example : ytdlmusic "the beatles" "let it be" auto

~ ytdlmusic full-update
update the ytdlmusic package and the dependencies [y/n] ? n
~ ytdlmusic update     
update the ytdlmusic package [y/n] ? n
~ 

Dernière modification par thib1984 (Le 13/04/2021, à 19:41)

Hors ligne

#1987 Le 13/04/2021, à 20:38

jlfh0816

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@thib1984
Bravo pour la réactivité !
J'ai testé dans la foulée et les deux options (update et full-update) fonctionnent sans soucis.
Encore merci pour ton application que je trouve vraiment pratique et efficace (elle trouve même les titres et/ou les auteurs si on fait une faute d'orthographe).

PS: si j'ai bien compris, ton application archive par défaut tous les titres téléchargés dans le répertoire courant, le $HOME
Penses-tu qu'il soit possible de lui préciser un autre répertoire ou dossier d'archivage ?
Par exemple, quelque chose comme la ligne de commande ci-dessous :

ytdlmusic "the beatles" "let it be" $HOME/Musique/Beatles/

Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#1988 Le 13/04/2021, à 20:58

thib1984

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@jlfh0816

Yes, par défaut ca DL dans le répertoire courant (pas forcément le HOME donc).
Je note ton idée, après ca rentrerait en conflit avec le troisième paramètre qui est réservé à "auto" faudrait que je trouve une autre façon de tourner cette option.
Et je ne sais pas si je devrais gérer ou non l'existence du dossier?

Pour le titre/auteur, ce n'est pas géré par ytdlmusic mais par youtube-search-python.
En clair, youtube-search-python version gère jusqu'à l'affichage de la liste des résultats, puis youtube-dl prend le relais une fois le choix indiqué.
ytdlmusic gère la communication entre les deux packages et la coquille de présentation smile

Hors ligne

#1989 Le 13/04/2021, à 21:08

jlfh0816

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@thib1984
OK, merci pour toutes ces explications !  tongue


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#1990 Le 16/04/2021, à 13:22

thib1984

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@jlfh0816

J'ai apporté pas mal de modifs dans le coeur du code (mais peu de choses visibles)
tape

ytdlmusic

puis la commande proposée pour l'update...
puis retape

ytdlmusic

pour récupérer les nouvelles commandes :

Normalement tu devrais avoir :

    NAME
        ytdlmusic

    SYNOPSIS
        With ytdlmusic, you can download directly from YouTube music files in MP3/OGG format from your terminal, 
        without using your browser. By default, it will match your request with a selection of 5 results 
        with a breif summary to choose from or you can use auto mode to download automaticaly the first item.

        --help              : display this help
                            -> ytdlmusic --help
        --update            : upgrade ytdlmusic
                            -> ytdlmusic --update   
        --full-update       : upgrade youtube-dl, youtube-search-python and ytdlmusic
                            -> ytdlmusic --full-update                                                   
        --version           : display versions of ytdlmusic and his dependencies
                            -> ytdlmusic --version                         
        artist song         : display 5 choices from YouTube with given search, then download the MP3/OGG chosen by user
                            -> example : ytdlmusic "Rexlambo" "Stay With Me"
        --auto artist song  : download MP3/OGG of the first from YouTube with given search
                            -> example : ytdlmusic --auto "Rexlambo" "Stay With Me"

Les options s'activent avec "--" ce qui me permettra peut etre de gérer le repertoire de destination à l'avenir smile
J'utilise aussi une musique libre de droits dans l'exemple.
Normalement, je gère mieux les dépendances requises de version également smile

N'hésite pas à me faire des retours sur la documentation smile

Dernière modification par thib1984 (Le 16/04/2021, à 13:23)

Hors ligne

#1991 Le 16/04/2021, à 13:50

jlfh0816

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

@thib1984

J'ai suivi scrupuleusement tes indications et tout s'est bien passé
J'ai bien accès aux commandes à double tiret -- de cette nouvelle version 1.0.2 de ytdlmusic :

jlfh0816 @ Voyager1804  ~
└─ $ ▶ ytdlmusic --version
ytdlmusic version             : 1.0.2
youtube-search-python version : 1.4.3
youtube-dl version            : 2021.4.7
pip(3) version                : 9.0.1
Python version                : 3.6.9 (default, Jan 26 2021, 15:33:00) [GCC 8.4.0]
ffmpeg                        : /usr/bin/ffmpeg

Et les téléchargements s'effectuent aussi bien avec cette nouvelle version qu'avec l'ancienne  big_smile


Xubuntu - Voyager 18.04 et 22.04

Hors ligne

#1992 Le 19/04/2021, à 14:27

Tawal

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Hello,

Je poste ici un petit script qui renvoie les processus qui utilisent le swap.

#!/bin/bash
# Nom : procswap

tot=0

shopt -s nullglob
for fich in /proc/*/status
do
    awk '/Name|Tgid|VmSwap/ {printf("%s %s",$2,$3)} END {print ""}' $fich 2>/dev/null

done | grep kB  | grep -v " 0 kB" | sort -k 3 -nr -o /tmp/procswap

if [ -s /tmp/procswap ]
then
    printf "%-18s%5s%11s\\n" "PROCESSUS" "PID" "SWAPED"
    while read line
    do
        ligne=( $line )
        tot=$(( tot+ligne[2] ))
        printf "%-18s%5s%8s %2s\\n" "${ligne[@]}"
    done < /tmp/procswap

    tot=$((tot/1024))
    echo
    echo "Total swaped : $tot MB"
else
    echo "Aucun processus utilise le swap."
fi

rm /tmp/procswap

exit 0

Exemple de retour :

$ procswap
PROCESSUS           PID     SWAPED
lightdm             934     728 kB
dbus-daemon         797     292 kB
Xorg               1102     144 kB
unattended-upgr     922     144 kB
dbus-daemon        1568      72 kB
NetworkManager      800      52 kB
pulseaudio         2160      44 kB
evolution-calen    2598      16 kB
gvfs-udisks2-vo    2484      12 kB

Total swaped : 1 MB
$

Bon usage smile

Dernière modification par Tawal (Le 19/04/2021, à 14:35)


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

#1993 Le 19/04/2021, à 14:41

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

avec awk, la boucle for est inutile, ainsi que les grep, et on peut aussi se dipenser du sort, avec Gawk.

edit : finalement, je ne suis pas sûr* si tout ne pourrait pas être fait en gawk.

--
* pas sûr à 2%

Dernière modification par Watael (Le 19/04/2021, à 14:42)


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

Hors ligne

#1994 Le 19/04/2021, à 14:58

Tawal

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Merci de tous ces conseils.
Déjà que je ne maîtrise pas du tout toutes les possibilités d'awk, je vais avoir du mal avec gwak, mais je vais regarder wink

Je crois que j'ai compris comment se passer de la boucle for : en passant /proc/*/status en paramêtre à awk.

Je vais étudier (et j'en ai besoin) awk et gawk pour se passer des grep et du sort.


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

#1995 Le 19/04/2021, à 17:13

Jarodd

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Bonjour,
Ca a probablement déjà été fait des milliers de fois, et de façon bien plus propre et efficace, mais j'ai fait ça pour m'amuser et apprendre la syntaxe.
C'est un petit script pour renommer des fichiers, en passant en paramètre une chaîne à supprimer.
Exemple : mon_fichier_a_moi.txt
Appel du script rename_files.sh _a_moi
=> Le fichier sera renommé mon_fichier.txt

Je l'utilise pour renommer des photos/vidéos, et enlever les IMG_, VID_ et autres _HDR sans lancer de programme externe.

#!/bin/bash

##### Ne pas oublier de donner la permission +x à l'user qui lance le script
##### SCRIPT A LANCER AVEC :
##### ./rename_files.sh chaine_a_supprimer

COLOR_BLACK='\033[0m'
COLOR_RED='\033[0;31m'
COLOR_GREEN='\033[0;32m'
COLOR_YELLOW='\033[0;33m'
COLOR_BLUE='\033[0;34m'
COLOR_PURPLE='\033[0;35m'
COLOR_CYAN='\033[0;36m'
COLOR_WHITE='\033[0;37m'

get_nb_of_files_named() {
    echo -e "${COLOR_YELLOW}1/ ${COLOR_BLACK}Recherche de fichiers contenant le terme :${COLOR_CYAN}" $@
    cmd="ls | grep $@"
    #echo $cmd
    nb_files=`bash -c "$cmd" | wc -l`
}

get_files_named() {
    echo -e "${COLOR_YELLOW}2/ ${COLOR_BLACK}Fichiers contenant le terme :${COLOR_CYAN}" $@
    cmd="ls | grep $@"
    #echo $cmd
    files=`bash -c "$cmd"`
    echo -e "    "${COLOR_PURPLE}$files
}

rename_files() {
    echo -e "${COLOR_YELLOW}3/ ${COLOR_BLACK}Suppression de ${COLOR_CYAN}$1 ${COLOR_BLACK}dans le(s) fichier(s) suivant(s) :"
    for file in $files;
	do
        old_name=${file}
        new_name="$(echo ${old_name} | sed "s/$str_to_delete//g")"
        mv "$old_name" "$new_name"
		echo -e "    "${COLOR_RED}${old_name} ${COLOR_BLACK}"renommé en" ${COLOR_GREEN}$new_name
    done
}

nb_files=0
get_nb_of_files_named $@
if [ $nb_files = 0 ]
then
	echo -e "${COLOR_RED}Aucun fichier nommé ${COLOR_CYAN}$@"
else
    if [ $nb_files = 1 ]
    then
        echo -e "    ${COLOR_BLACK}=> ${COLOR_GREEN}1 fichier contenant ${COLOR_CYAN}$@"
    else
        echo -e "    ${COLOR_BLACK}=> ${COLOR_GREEN}$nb_files fichiers contenant ${COLOR_CYAN}$@"
    fi
    get_files_named $@
    str_to_delete=$@
    rename_files $str_to_delete $files
fi

Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#1996 Le 19/04/2021, à 17:15

Tawal

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

En effet, j'ai pu (d'une manière barbare à mon avis) tout intégrer dans une commande awk sauf le sort.
La commande est longue car elle affiche l'entête et la conclusion :

$ awk 'BEGIN{printf("%-18s %5s %11s\n","PROCESSUS","PID","SWAPED")} /Name/ {a=$2} /Tgid/ {b=$2} /VmSwap/ {if ($2!=0) printf("%-18s %5s %8s %2s\n",a,b,$2,$3); c=(c+$2)} END {u="kB"; if (c>1024) {c=(c/1024); u="MB"}; printf("\nTotal swaped : %s %s\n",c,u)}' /proc/*/status
PROCESSUS            PID      SWAPED
dbus-daemon          797       80 kB
NetworkManager       800        4 kB
lightdm              934      144 kB

Total swaped : 228 kB

Je sens que pour obtenir le sort, ça va me compliquer l'affaire ...


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

#1997 Le 19/04/2021, à 17:44

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

pour le tri dans awk, utilise un tableau : la valeur à trier en indice, et les valeurs à afficher en valeur, et assigne PROCINFO("sorted_in").
pour faire simple, parce qu'il existe aussi des fonction asort() et asorti()... hmm


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

Hors ligne

#1998 Le 19/04/2021, à 19:31

Tawal

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Watael a écrit :

pour faire simple, parce qu'il existe aussi des fonction asort() et asorti()

En effet, je galérais (sans résultat sad) avec asorti().
La variable d'environnement PROCINFO["sorted_in"] me convient mieux (peut-être parce que j'ai pu la mettre en œuvre) surtout en l'assignant avec @ind_num_desc
Voici la commande :

$ awk 'BEGIN{printf("%-18s %5s %11s\n","PROCESSUS","PID","SWAPED")} /Name/ {a=$2} /Tgid/ {b=$2} /VmSwap/ {if ($2!=0) {i=(i+1); t[$2]=sprintf("%-18s %5s %8s %2s",a,b,$2,$3); c=(c+$2)}} END {PROCINFO["sorted_in"]="@ind_num_desc"; for (i in t) {printf("%s\n",t[i])}; u="kB"; if (c>1024) {c=(c/1024); u="MB"}; printf("\nTotal swaped : %s %s\n",c,u)}' /proc/*/status
PROCESSUS            PID      SWAPED
lightdm              934      144 kB
dbus-daemon          797       80 kB

Total swaped : 224 kB

C'est 10×+ rapide que la boucle for smile

@geole: Bonne idée pour le free -h, je crois bien que je rajouterais ces infos dans le script wink


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

#1999 Le 19/04/2021, à 21:07

Tawal

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

Du coup voici le nouveau script avec les infos mémoire (merci geole) avec un grand MERCI à Watael de m'avoir fait chercher sur awk et gawk (pour ses conseils et infos aussi wink)

#!/bin/bash
# Nom : procswap

free -h | awk '{if (NR==1) {entete=toupper($0); print entete;next}}; {print}'

2>/dev/null awk 'BEGIN {
         printf("\n%-18s %5s %11s\n","PROCESSUS","PID","SWAPED")
     }

     /Name/ {nom_proc=$2}
     /Tgid/ {pid=$2}
     /VmSwap/ {
         if ($2!=0) {
             i=(i+1)
             datas_Tab[$2]=sprintf("%-18s %5s %8s %2s",nom_proc,pid,$2,$3)
             tot=(tot+$2)
         }
     }

     END {
         PROCINFO["sorted_in"]="@ind_num_desc"

         for (i in datas_Tab) {
             print datas_Tab[i]
         }

         unit="kB"

         if (tot>1024) {
             tot=(tot/1024)
             unit="MB"
         }

         if (tot>1048576) {
             tot=(tot/1048576)
             unit="GB"
         }

         printf("\nTotal swaped : %s %s\n",tot,unit)
     }' /proc/*/status

exit $?

Par contre avec cette indentation, ça me casse la coloration du script dans mon éditeur sad
Je pense que ça vient de la "coupure" des simples quotes ' encadrant la commande awk.

Edit: Rajout de l'exit $? et de la redirection des erreurs d' awk

Dernière modification par Tawal (Le 19/04/2021, à 21:11)


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

#2000 Le 19/04/2021, à 21:09

Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)

sad je suis étourdi : que se passe-t-il si plusieurs processus utilisent le même volume de swap ?
=>

awk 'FNR==1{split(FILENAME,nameParts,"/"); proc=nameParts[3]; /^Name:/name[proc]=$2; Tgid=[proc]=$2; ...

de plus, à la lecture du fichier, je convertirais en octets selon l'unité indiquée dans le status , et je créerais une fonction pour convertir en unité lisible par un humain dans le END au moment de l'affichage

je crois que tu devrais attendre que nous ayons validé tes scripts dans la rubrique « Terminal, scripts et ligne de commande » avant de les poster sur « Vos scripts utiles » .


PS: le tri se fait alors sur la valeur du tableau, plus sur l'indice.
PS2 : j'essaie de faire des tests, mais ma machine ne swap pas. sad

$ awk 'BEGIN{PROCINFO["sorted_in"]="@val_num_desc"; units["kB"]=1024; units["mB"]=1024**2; units[gB]=1024**3}/^Name/{name=$2}; /^Tgid/{tgid=$2}; /^VmSwap/{byteSize=$2*units[3]; procName[tgid]=name; procSwap[t
gid]=byteSize}END{for(i in procSwap)print procName[i],bytes2human(procSwap[i]) }' /proc/*/status 

il faut encore créer la fonction bytes2human() pour rendre le nombre d'octets lisible par un humain

Dernière modification par Watael (Le 20/04/2021, à 01:23)


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

Hors ligne