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 : falseist 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
basenameist viel einfacher.