AWK: 最後のパターンを削除するにはどうすればいいですか?

AWK: 最後のパターンを削除するにはどうすればいいですか?

私には道がある:

/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/mcc_oriii_after_centering.pdb

私が欲しいのは:

/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

私が試したこと:

a="/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/mcc_oriii_after_centering.pdb"
echo $a | awk -F'/' '{print $NF}'

しかし、私が得たものは次のとおりです。

mcc_oriii_after_centering.pdb

答え1

値を$NF空の文字列に設定することもできます。

$ echo "$a" | awk -F'/' 'BEGIN{OFS=FS} {$NF=""; print}'
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

BEGIN{OFS=FS}処理を開始する前に、出力フィールド区切り文字を入力フィールド区切り文字と同じに設定します。そうでない場合、出力はスラッシュではなくデフォルトのスペースで区切られます。

少なくとも GNU awk では、減算することで最後のフィールドを完全に削除することもできますNF(ただし、これにより末尾のスラッシュのない出力が生成されます)。

awk -F'/' 'BEGIN{OFS=FS} {NF--; print}'

シェルパラメータ拡張を使用して awk を完全に回避することもできます。

$ echo "${a%/*}/"
/home/alejo/Desktop/Proyecto_UIS-MINCIENCIAS/qmmm_propranolol_aescorcia/A_PSF-NUEVO/ORIII/MCC/out/

${parameter%pattern}シェル変数の値をparameter、末尾の最短一致を削除しpatternて返します。例を参照してください。BashGuide: パラメータの拡張

または、単にdirnameコマンドを使用します。

関連情報