awk - 最後の列または最後の列が空の場合、最後の列を印刷します。

awk - 最後の列または最後の列が空の場合、最後の列を印刷します。

AWK文字列がファイル名または最後のフォルダ名を取得するために使用したいディレクトリの場合。

私は持っています:

 awk -F '/' '{print $NF}'

最後の列を印刷して、次の操作を行います。

 awk -F '/' '{print $(NF - 1)}

最後の列の前に1列を印刷します。

awk文字列にディレクトリのみがあり、ファイル名がないことをどのように識別できますか?この場合、最後の列の前に列を印刷します。

私の問題は、ディレクトリが次のようになることです。

./folder1/folder2/folder3/

この場合、最後の列は空です。私はawkこれを識別して印刷したいfolder3(したがって、最後の列の前に列があります)。

答え1

ifOR?:演算子を使用してこれを実行できます。

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
/

zshfor :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ユーティリティ

関連情報