awkプログラムのパスからファイル名を抽出する

awkプログラムのパスからファイル名を抽出する

awkスクリプトがあり、ここにCSVファイルを渡しました。

awk -f script.awk /home/abc/imp/asgd.csv

私がやっていることは、.FILENAME内のFILENAMEをインポートすることですscript.awk。これは私にフルパスを提供します。 awkでは使用できませんbasename FILENAME

print FILENAME;
/home/abc/imp/asgd.csv

私はこれを試しましたscript.awk

echo $FILENAME | awk -F"/" '{print $NF}'

しかし、中ではできませんscript.awkasgd.csvawkプログラムにどのように入ることができますか?

ベストアンサー1

複数のオプション:

awk '
  function basename(file) {
    sub(".*/", "", file)
    return file
  }
  {print FILENAME, basename(FILENAME)}' /path/to/file

または:

awk '
  function basename(file, a, n) {
    n = split(file, a, "/")
    return a[n]
  }
  {print FILENAME, basename(FILENAME)}' /path/to/file

これらの実装はbasename通常の場合は機能しますが、空のbasename /path/to/x///文字列ではなく空の文字列xを返すなどの特殊な場合には機能しませんが、通常のファイルではこれを行うべきではありません。//

ファイルパス(最後のパスまで/)に現在のロケールで有効な文字を形成しないバイトシーケンスが含まれている場合、最初のパスは正しく機能しません。通常、この問題はファイル名が一部の8エンコードされたUTF-8ロケールで発生します。中)ビットシングルバイト文字セット)。すべてのバイトシーケンスが有効な文字を形成するCでロケールを変更すると、この問題を解決できます。

おすすめ記事