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 basenamedevem funcionar para os casos comuns, mas não nos casos de canto, como basename /path/to/x///onde eles retornam a cadeia vazia em vez de xou /onde retornam a cadeia vazia em vez de /, embora para arquivos regulares, isso não deva acontecer.
O primeiro não funcionará corretamente se os caminhos do arquivo (até o último /) contiverem seqüências de bytes que não formam caracteres válidos no código do idioma atual (normalmente esse tipo de coisa acontece nos códigos de idioma UTF-8 com nomes de arquivos codificados em cerca de 8 conjunto de caracteres de byte único). Você pode contornar isso fixando o código do idioma em C, onde cada sequência de bytes forma caracteres válidos.
Se você precisa de código que irá trabalhar facilmente dentro de um script awk existente sem introduzir uma função, você deve usar: n = split(FILENAME, a, "/"); basename=a[n];. Não use, subpois isso realmente mudará a FILENAMEvariável (o que não é um problema da função, pois o awk usa a chamada por valor).
a melhor maneira de exportá-lo do CSV de entrada ou diretamente do caminho do arquivo de entrada, você pode revertê-lo, obter uma coluna e inverter novamente.
Nos sistemas em que o basenamecomando está disponível, pode-se usar awka system()função ou expression | getline varestrutura de para chamar o basenamecomando externo . Isso pode ajudar a explicar os casos extremos mencionados na resposta de Stephane .
n = split(FILENAME, a, "/"); basename=a[n];
. Não use,sub
pois isso realmente mudará aFILENAME
variável (o que não é um problema da função, pois o awk usa a chamada por valor).Experimente este awk one-liner,
fonte
awk 'END{ var=FILENAME; n=split (var,a,/\//); print a[n]}' /home/abc/imp/asgd.csv
a melhor maneira de exportá-lo do CSV de entrada ou diretamente do caminho do arquivo de entrada, você pode revertê-lo, obter uma coluna e inverter novamente.
ou simplesmente
fonte
Use a função Split do Awk
Uma maneira de fazer isso é usar a função de divisão. Por exemplo:
Isso funciona mesmo em vários arquivos. Por exemplo:
fonte
Nos sistemas em que o
basename
comando está disponível, pode-se usarawk
asystem()
função ouexpression | getline var
estrutura de para chamar obasename
comando externo . Isso pode ajudar a explicar os casos extremos mencionados na resposta de Stephane .fonte