AWK
를 사용하여 파일 이름 또는 마지막 폴더 이름 (문자열이 디렉토리 일 경우).
다음 항목이 있습니다.
awk -F "/" "{print $NF}"
마지막 열을 인쇄하고 :
awk -F "/" "{print $(NF - 1)}
마지막 열 앞에 한 열을 인쇄합니다.
awk
를 어떻게 만들 수 있습니까? 문자열에 디렉토리 만 있고 파일 이름은 없는지 인식하고이 경우 마지막 열 앞에 한 열을 인쇄합니다.
내 문제는 디렉토리가 다음과 같을 수 있다는 것입니다.
./folder1/folder2/folder3/
이 경우 마지막 열은 비어 있습니다. awk
가 이것을 인식하고 folder3
를 인쇄하기를 원합니다 (따라서 마지막 열보다 한 열 앞).
답변
if
또는 ?:
연산자를 사용할 수 있습니다. 이를 위해.
awk -F "/" "{print $NF == "" ? $(NF - 1) : $NF}"
awk -F "/" "{if($NF == "") print $(NF - 1); else print $NF}"
댓글
답변
GNU 유틸리티를 사용하는 경우 다음을 참조하십시오.
xargs -rd "\n" basename -a --
list.txt
입력에서 다음과 같이 입력하십시오.
./folder1/folder2/folder3/ ./foo bar/// /
제공 :
folder3 foo bar /
zsh
“의 :t
수정 자 (csh
에서)는 "/"
div에 “”
를 제공합니다. > 대신 "/"
$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <>
답변
시도
(그래도 테스트 할 수 없었습니다).
답변
셸에서 :
$ basename ./folder1/folder2/folder3/ folder3
basename
를 포함하는 변수와 함께 변수에 할당 경로 이름 :
filename=$( basename "$pathname" )
basename
유틸리티는 표준입니다. POSIX 유틸리티 .
댓글
- thx, 제 질문은 ,
basename
를 사용하는 것이 훨씬 더 간단합니다.
test ? true : false
는 현명한 선택입니다.