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.awk
。asgd.csv
awkプログラムにどのように入ることができますか?
ベストアンサー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でロケールを変更すると、この問題を解決できます。