1. ホーム
  2. unix

[解決済み】awk substrを使用して最後のフィールドを取得する

2022-02-19 09:27:56

質問

を使おうとしています。 awk を使用して、ファイルへの絶対パスを指定してファイル名を取得します。
例えば、入力パス /home/parent/child/filename を取得したいのですが filename 試してみました。

awk -F "/" '{print $5}' input

で、これは完全に動作します。
しかし、私はハードコーディングしています $5 というのは、入力が以下のような構造になっている場合、不正確です。

/home/parent/child1/child2/filename

つまり、一般的な解決策では、常に 最後の フィールド(ファイル名となる)を指定します。

awkのsubstr関数で簡単にできる方法はないでしょうか?

どのように解決するのですか?

という事実を利用する。 awk は、定義したフィールドセパレータに基づいてフィールド内の行を分割します。したがって、フィールドセパレータを / と言うことができます。

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

として NF は現在のレコードのフィールド数を意味し、印刷は $NF は最後の1つを表示することを意味します。

だから、このようなファイルがあると

/home/parent/child1/child2/child3/filename
/home/parent/child1/child2/filename
/home/parent/child1/filename

これが出力となる。

$ awk -F"/" '{print $NF}' file
filename
filename
filename