Ich möchte AWK
verwenden, um die zu erhalten Dateiname oder der Name des letzten Ordners, wenn die Zeichenfolge nur ein Verzeichnis ist.
Ich habe:
awk -F "/" "{print $NF}"
, um die letzte Spalte zu drucken und:
awk -F "/" "{print $(NF - 1)}
, um eine Spalte vor der letzten zu drucken.
Wie kann ich awk
erstellen? Erkennen Sie, ob die Zeichenfolge nur ein Verzeichnis und keinen Dateinamen enthält, und drucken Sie in diesem Fall eine Spalte vor der letzten.
Mein Problem ist, dass ein Verzeichnis möglicherweise folgendermaßen aussieht:
./folder1/folder2/folder3/
und in diesem Fall wäre die letzte Spalte leer. Ich möchte, dass awk
dies erkennt und dann folder3
(also eine Spalte vor der letzten) druckt.
Antwort
Sie können entweder if
oder den Operator ?:
verwenden hierfür.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
Kommentare
- Der ternäre Operand
test ? true : false
ist eine clevere Wahl.
Antwort
Bei GNU-Dienstprogrammen siehe auch:
xargs -rd "\n" basename -a --
Welche auf einer list.txt
-Eingabe wie:
./folder1/folder2/folder3/ ./foo bar/// /
ergibt:
folder3 foo bar /
zsh
„s :t
(von csh
) gibt ""
für "/"
anstelle von "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
Antwort
versuchen
(ich konnte es jedoch nicht testen).
Antwort
In der Shell:
$ basename ./folder1/folder2/folder3/ folder3
Zuweisen zu einer Variablen mithilfe von basename
mit einer Variablen, die a enthält Pfadname:
filename=$( basename "$pathname" )
Das Dienstprogramm basename
ist ein Standard POSIX-Dienstprogramm .
Kommentare
- Danke, meine Frage hat bei der Verwendung von Die Verwendung von
basename
ist viel einfacher.