awk - 마지막 열 또는 마지막 열이 비어 있으면 마지막 열을 인쇄합니다.

awk - 마지막 열 또는 마지막 열이 비어 있으면 마지막 열을 인쇄합니다.

AWK문자열이 파일 이름이나 마지막 폴더 이름을 얻는 데 사용하고 싶은 디렉토리인 경우.

나는 가지고있다:

 awk -F '/' '{print $NF}'

마지막 열을 인쇄하고 다음을 수행합니다.

 awk -F '/' '{print $(NF - 1)}

마지막 열 앞에 한 열을 인쇄합니다.

awk문자열에 디렉토리만 있고 파일 이름은 없는지 어떻게 식별할 수 있습니까 ? 이 경우 마지막 열 앞에 열을 인쇄합니다.

내 문제는 디렉토리가 다음과 같다는 것입니다.

./folder1/folder2/folder3/

이 경우 마지막 열은 비어 있습니다. 나는 awk이것을 식별한 다음 인쇄하고 싶습니다 folder3(따라서 마지막 열 앞에 열이 있습니다).

답변1

ifOR ?:연산자를 사용하여 이를 수행 할 수 있습니다 .

awk -F '/' '{print $NF == "" ? $(NF - 1) : $NF}'
awk -F '/' '{if($NF == "") print $(NF - 1); else print $NF}'

답변2

노력하다

awk -F/ '{if (length($NF)) print $NF ; else print $(NF-1) ;}' 

(그래도 테스트는 못했어요)

답변3

GNU 유틸리티에 대해서는 다음도 참조하세요.

xargs -rd '\n' basename -a --

list.txt다음을 입력 :

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

다음을 제공합니다:

folder3
foo
bar
/

zshfor :t(from csh) 수식자는 for 대신에 ""다음을 제공합니다."/""/"

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

답변4

셸에서:

$ basename ./folder1/folder2/folder3/
folder3

basename경로 이름을 보유하는 변수와 함께 사용하기 위해 변수에 할당합니다 .

filename=$( basename "$pathname" )

유틸리티 basename표준 POSIX 유틸리티.

관련 정보