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 : false
on fiksu valinta.