Bonjour à tous,
Je cherche à extraire une liste de tous les fichiers .js, mentionnés dans un fichier acces_log.txt
La sortie ne doit pas :
- Inclure le chemin d'accès complet, elle doit lister uniquement le nom du fichier .js
La liste obtenue doit :
- Être triée par ordre alphabétique
- Ne faire apparaître chaque fichier qu'une fois
Pour cela, j'ai fait la commande suivante, qui fonctionne bien.
cat access_log.txt | grep '\.js ' | awk '{print $7}'| rev | cut -d '/' -f '1' | rev | sort -d | uniq.
Toutefois j'aimerais l'améliorer si cela est possible car je ne la trouve pas très "clean".
La première partie de la commande,
cat access_log.txt | grep '\.js ' | awk '{print $7}'.
Affiche la sortie suivante :
J'ai donc voulu utiliser cut avec le délimiteur / pour retirer les chemin d'accès au fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [...] /components/com_phocagallery/assets/js/shadowbox/src/lang/shadowbox-en.js /media/system/js/caption.js /templates/jp_hotel/js/moomenu.js /modules/mod_bowslideshow/tmpl/js/sliderman.1.3.0.js /media/system/js/mootools.js /media/system/js/caption.js [...]
Sauf que certains fichiers sont à la racine, d'autre nécessitent de rentrer dans un, deux ou trois dossiers en amont.
Du coup, je ne peux pas dire à cut le nombre de champs -f qu'il doit tronquer (à partir du début de la ligne).
Pour cette raison, j'ai utilisé rev pour inverser la sortie, j'ai ensuite indiqué à cut de tronquer le premier champ sur lequel il tombe, puis j'ai de nouveau utilisé rev pour que la sortie soit lisible par un humain.
Ca marche, mais je trouve que cela fait un peu bricolage.
Est-ce qu'il ne serait pas possible d'indiquer à cut de se caler sur le premier délimiteur /, mais en partant de la fin de la ligne et non du début ?![]()
Partager