Awk-最後の列を印刷するか、最後が空の場合は最後の1つ前に印刷します

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}" 

コメント

  • 三項オペランドtest ? true : falseは賢い選択です。

回答

GNUユーティリティについては、以下も参照してください。

xargs -rd "\n" basename -a -- 

list.txt入力の場合:

./folder1/folder2/folder3/ ./foo bar/// / 

提供:

folder3 foo bar / 

zsh “s :t修飾子(cshから)は、"/"“”を与えます> "/"

$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <> 

回答

試してみる

(テストできませんでした)

回答

シェル内:

$ basename ./folder1/folder2/folder3/ folder3 

basenameを保持する変数とともに変数に割り当てるパス名:

filename=$( basename "$pathname" ) 

basenameユーティリティは標準ですPOSIXユーティリティ

コメント

  • thx、私の質問は、basenameの使用ははるかに簡単です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です