Awk – stampa lultima colonna o una prima dellultima se lultima è emty

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

  • Loperando ternario test ? true : false è una scelta intelligente.

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, utilizzare basename è molto più semplice.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *