AWK
文字列がファイル名または最後のフォルダ名を取得するために使用したいディレクトリの場合。
私は持っています:
awk -F '/' '{print $NF}'
最後の列を印刷して、次の操作を行います。
awk -F '/' '{print $(NF - 1)}
最後の列の前に1列を印刷します。
awk
文字列にディレクトリのみがあり、ファイル名がないことをどのように識別できますか?この場合、最後の列の前に列を印刷します。
私の問題は、ディレクトリが次のようになることです。
./folder1/folder2/folder3/
この場合、最後の列は空です。私はawk
これを識別して印刷したいfolder3
(したがって、最後の列の前に列があります)。
答え1
if
OR?:
演算子を使用してこれを実行できます。
awk -F '/' '{print $NF == "" ? $(NF - 1) : $NF}'
awk -F '/' '{if($NF == "") print $(NF - 1); else print $NF}'
答え2
努力する
awk -F/ '{if (length($NF)) print $NF ; else print $(NF-1) ;}'
(それでもテストできませんでした)
答え3
GNUユーティリティについては、以下も参照してください。
xargs -rd '\n' basename -a --
list.txt
次のように入力します。
./folder1/folder2/folder3/
./foo
bar///
/
以下を提供します。
folder3
foo
bar
/
zsh
for :t
(from csh
)修飾子はforの代わりに""
次のものを提供します。"/"
"/"
$ printf '<%s>\n' "${(@)${(f)$(<list.txt)}:t}"
<folder3>
<foo>
<bar>
<>
答え4
シェルから:
$ basename ./folder1/folder2/folder3/
folder3
basename
パス名を保持する変数で使用するために変数に割り当てます。
filename=$( basename "$pathname" )
ユーティリティbasename
は標準POSIXユーティリティ。