awk '
function basename(file){
sub(".*/","", file)return file}{print FILENAME, basename(FILENAME)}' /path/to/file
Lub:
awk '
function basename(file, a, n){
n = split(file, a,"/")return a[n]}{print FILENAME, basename(FILENAME)}' /path/to/file
Zauważ, że te implementacje basenamepowinny działać w typowych przypadkach, ale nie w przypadkach narożnych, takich jak basename /path/to/x///zwracanie pustego ciągu zamiast xlub /gdzie zwracanie pustego ciągu zamiast /, chociaż w przypadku zwykłych plików, to nie powinno się zdarzyć.
Pierwszy nie będzie działał poprawnie, jeśli ścieżki plików (do ostatnich /) zawierają sekwencje bajtów, które nie tworzą prawidłowych znaków w bieżących ustawieniach narodowych (zazwyczaj taka sytuacja ma miejsce w ustawieniach regionalnych UTF-8 z nazwami plików zakodowanymi w około 8 zestaw znaków jednobajtowych). Można obejść ten problem, ustawiając ustawienia regionalne na C, gdzie każda sekwencja bajtów tworzy prawidłowe znaki.
Jeśli potrzebujesz kodu, który będzie działał łatwo w istniejącym skrypcie awk bez wprowadzania funkcji, należy użyć: n = split(FILENAME, a, "/"); basename=a[n];. Nie używaj, subponieważ zmieni to FILENAMEzmienną (co nie jest problemem z funkcją, ponieważ awk używa wywołania według wartości).
najlepszym sposobem na wyeksportowanie go z wejściowego pliku CSV lub bezpośrednio ze ścieżki pliku wejściowego, możesz go odwrócić, a następnie uzyskać 1 kolumnę, a następnie ponownie odwrócić.
Na systemach, gdzie basenamepolecenie jest dostępne, można było użyć awk„s system()funkcję lub expression | getline varstrukturę zadzwonić zewnętrznego basenamepolecenia. Może to pomóc w rozliczeniu przypadków narożnych wymienionych w odpowiedzi Stephane'a .
n = split(FILENAME, a, "/"); basename=a[n];
. Nie używaj,sub
ponieważ zmieni toFILENAME
zmienną (co nie jest problemem z funkcją, ponieważ awk używa wywołania według wartości).Wypróbuj ten awk one-liner,
źródło
awk 'END{ var=FILENAME; n=split (var,a,/\//); print a[n]}' /home/abc/imp/asgd.csv
najlepszym sposobem na wyeksportowanie go z wejściowego pliku CSV lub bezpośrednio ze ścieżki pliku wejściowego, możesz go odwrócić, a następnie uzyskać 1 kolumnę, a następnie ponownie odwrócić.
lub po prostu
źródło
Użyj funkcji podziału Awk
Jednym ze sposobów jest skorzystanie z funkcji podziału. Na przykład:
Działa to nawet na wielu plikach. Na przykład:
źródło
Na systemach, gdzie
basename
polecenie jest dostępne, można było użyćawk
„ssystem()
funkcję lubexpression | getline var
strukturę zadzwonić zewnętrznegobasename
polecenia. Może to pomóc w rozliczeniu przypadków narożnych wymienionych w odpowiedzi Stephane'a .źródło