Awk – affiche la dernière colonne ou une avant la dernière si la dernière est emty

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

  • Lopérande ternaire test ? true : false est un choix intelligent.

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, utiliser basename est beaucoup plus simple.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *