Extrair o nome do arquivo do caminho no programa awk
Eu tenho um script awk e passei um arquivo CSV para ele.
O que estou fazendo é colocar FILENAME dentro script.awk. FILENAME me fornece todo o caminho. Como estou no awk, não posso usar basename FILENAME.
Eu tentei com isso dentro script.awk
mas não posso executar isso por dentro script.awk. Como posso entrar asgd.csvem um programa awk?
— Aashu
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).
— shiri 07/01
Experimente este awk one-liner,
ouawk '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.
— FariZ
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:
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 .