AWK
を使用してファイル名または文字列がディレクトリのみの場合は最後のフォルダ名。
次のものがあります:
awk -F "/" "{print $NF}"
最後の列を出力し、次のようにします。
awk -F "/" "{print $(NF - 1)}
最後の1列前に印刷します。
awk
を作成するにはどうすればよいですか。文字列にディレクトリのみが含まれ、ファイル名が含まれていないかどうかを認識します。この場合、最後の1列前に出力します。
私の問題は、ディレクトリが次のようになることです。
./folder1/folder2/folder3/
この場合、最後の列は空になります。 awk
にこれを認識させてから、folder3
(つまり、最後の列の1列前)を出力します。
回答
if
または?:
演算子のいずれかを使用できます
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
コメント
回答
GNUユーティリティについては、以下も参照してください。
xargs -rd "\n" basename -a --
list.txt
入力の場合:
./folder1/folder2/folder3/ ./foo bar/// /
提供:
folder3 foo bar /
zsh
“s :t
修飾子(csh
から)は、"/"
divに“”
を与えます> "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
回答
試してみる
(テストできませんでした)
回答
シェル内:
$ basename ./folder1/folder2/folder3/ folder3
basename
を保持する変数とともに変数に割り当てるパス名:
filename=$( basename "$pathname" )
basename
ユーティリティは標準ですPOSIXユーティリティ。
コメント
- thx、私の質問は、
basename
の使用ははるかに簡単です。
test ? true : false
は賢い選択です。