Várias opções:
awk '
function basename(file) {
sub(".*/", "", file)
return file
}
{print FILENAME, basename(FILENAME)}' /path/to/file
Ou:
awk '
function basename(file, a, n) {
n = split(file, a, "/")
return a[n]
}
{print FILENAME, basename(FILENAME)}' /path/to/file
Observe que essas implementações de basename
devem funcionar para os casos comuns, mas não em casos de canto como basename /path/to/x///
, onde retornam a sequência vazia em vez de x
ou /
, onde retornam a sequência vazia em vez de /
, embora para arquivos regulares, isso não aconteça.
O primeiro não funcionará corretamente se os caminhos de arquivo (até o último /
) contiverem sequências de bytes que não formam caracteres válidos no código de idioma atual (geralmente esse tipo de coisa acontece em locales UTF-8) com nomes de arquivos codificados em algum conjunto de caracteres de byte único de 8 bits). Você pode contornar isso fixando o código de idioma em C, onde cada sequência de caracteres válidos do formulário de byte.