Awk-마지막 열을 인쇄하거나 마지막 열이 emty 인 경우 마지막 열을 인쇄합니다.

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}" 

댓글

  • 삼항 피연산자 test ? true : false는 현명한 선택입니다.

답변

GNU 유틸리티를 사용하는 경우 다음을 참조하십시오.

xargs -rd "\n" basename -a -- 

list.txt 입력에서 다음과 같이 입력하십시오.

./folder1/folder2/folder3/ ./foo bar/// / 

제공 :

folder3 foo bar / 

zsh “의 :t 수정 자 (csh에서)는 "/"“”를 제공합니다. > 대신 "/"

$ printf "<%s>\n" "${(@)${(f)$(<list.txt)}:t}" <folder3> <foo> <bar> <> 

답변

시도

(그래도 테스트 할 수 없었습니다).

답변

셸에서 :

$ basename ./folder1/folder2/folder3/ folder3 

basename를 포함하는 변수와 함께 변수에 할당 경로 이름 :

filename=$( basename "$pathname" ) 

basename 유틸리티는 표준입니다. POSIX 유틸리티 .

댓글

  • thx, 제 질문은 , basename를 사용하는 것이 훨씬 더 간단합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다