Haluan käyttää AWK saadaksesi tiedostonimi tai viimeisten kansioiden nimi, jos merkkijono on vain hakemisto. 
Minulla on:
 awk -F "/" "{print $NF}" 
tulostaa viimeinen sarake ja:
 awk -F "/" "{print $(NF - 1)} 
tulostaa yksi sarake ennen viimeistä.
 Kuinka voin tehdä awk tunnista, sisältääkö merkkijono vain hakemiston eikä tiedostonimeä, ja tulosta tässä tapauksessa yksi sarake ennen viimeistä. 
Minun ongelmani on, että hakemisto saattaa näyttää tältä:
./folder1/folder2/folder3/ 
 ja tässä tapauksessa viimeinen sarake olisi tyhjä. Haluan awk tunnistaa tämän ja tulostaa sitten folder3 (yksi sarake ennen viimeistä). 
Vastaus
 Voit käyttää joko if tai ?: -operaattoria tätä varten. 
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}" 
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}" 
Kommentit
Vastaa
Katso myös GNU-apuohjelmien avulla:
xargs -rd "\n" basename -a -- 
 Mikä list.txt -tulossa, kuten: 
./folder1/folder2/folder3/ ./foo bar/// / 
antaa:
folder3 foo bar / 
 zsh ”s :t muokkaaja (mistä: csh) antaa "" kohteelle "/" sijasta "/" 
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <> 
Vastaa
kokeile
 
(En kuitenkaan pystynyt testaamaan sitä).
Vastaa
Kuoressa:
$ basename ./folder1/folder2/folder3/ folder3 
 Määrittäminen muuttujaan käyttämällä basename muuttujalla, joka pitää sisällään polun nimi: 
filename=$( basename "$pathname" ) 
 basename -apuohjelma on  vakio POSIX-apuohjelma . 
Kommentit
-  thx, kysymykseni on kasvattanut hieman paljon , 
basename-sovelluksen käyttö on paljon yksinkertaisempaa. 
test ? true : falseon fiksu valinta.