Voglio usare AWK
per ottenere il nomefile o il nome dellultima cartella se la stringa è solo una directory.
Ho:
awk -F "/" "{print $NF}"
per stampare lultima colonna e:
awk -F "/" "{print $(NF - 1)}
per stampare una colonna prima dellultima.
Come posso creare awk
riconoscere se la stringa contiene solo una directory e nessun nome di file e in questo caso stampa una colonna prima dellultima.
Il mio problema è che una directory potrebbe apparire come:
./folder1/folder2/folder3/
e in questo caso lultima colonna sarebbe vuota. Voglio che awk
lo riconosca, quindi stampi folder3
(quindi una colonna prima dellultima).
Risposta
Puoi utilizzare loperatore if
o ?:
per questo.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Commenti
Risposta
Con le utilità GNU vedi anche:
xargs -rd "\n" basename -a --
Quale su un list.txt
input come:
./folder1/folder2/folder3/ ./foo bar/// /
restituisce:
folder3 foo bar /
zsh
“s :t
modificatore (da csh
) restituisce ""
per "/"
invece di "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Risposta
prova
(non sono stato in grado di testarlo).
Risposta
Nella shell:
$ basename ./folder1/folder2/folder3/ folder3
Assegnazione a una variabile, utilizzando basename
con una variabile che contiene un pathname:
filename=$( basename "$pathname" )
Lutilità basename
è uno standard Utilità POSIX .
Commenti
- grazie, la mia domanda ha guadagnato un po di più sulluso di
AWK
, utilizzarebasename
è molto più semplice.
test ? true : false
è una scelta intelligente.