Je veux utiliser AWK
pour obtenir le nom de fichier ou le nom du dernier dossier si la chaîne nest quun répertoire.
Jai:
awk -F "/" "{print $NF}"
pour imprimer la dernière colonne et:
awk -F "/" "{print $(NF - 1)}
pour imprimer une colonne avant la dernière.
Comment puis-je créer awk
reconnaître si la chaîne ne contient quun répertoire et aucun nom de fichier et dans ce cas, imprimer une colonne avant la dernière.
Mon problème est quun répertoire pourrait ressembler à:
./folder1/folder2/folder3/
et dans ce cas la dernière colonne serait vide. Je veux que awk
le reconnaisse, puis jimprime folder3
(donc une colonne avant la dernière).
Réponse
Vous pouvez soit utiliser if
, soit lopérateur ?:
pour cela.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Commentaires
Réponse
Avec les utilitaires GNU, voir aussi:
xargs -rd "\n" basename -a --
Qui sur une entrée list.txt
comme:
./folder1/folder2/folder3/ ./foo bar/// /
donne:
folder3 foo bar /
zsh
« s :t
modificateur (de csh
) donne ""
pour "/"
au lieu de "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Réponse
essayez
(Je nai pas pu le tester cependant).
Réponse
Dans le shell:
$ basename ./folder1/folder2/folder3/ folder3
Assignation à une variable, en utilisant basename
avec une variable contenant un chemin:
filename=$( basename "$pathname" )
Lutilitaire basename
est un standard Utilitaire POSIX .
Commentaires
- thx, ma question a gagné un peu beaucoup sur lutilisation de
AWK
, utiliserbasename
est beaucoup plus simple.
test ? true : false
est un choix intelligent.