[unix] awk substr을 사용하여 마지막 필드 가져 오기

awk파일에 대한 절대 경로가 주어진 파일 이름을 가져 오는 데 사용하려고 합니다.
예를 들어, 입력 경로가 주어지면 /home/parent/child/filename얻고 filename
싶습니다.

awk -F "/" '{print $5}' input

완벽하게 작동합니다.
그러나 $5내 입력에 다음 구조가 있으면 잘못된 하드 코딩 입니다.

/home/parent/child1/child2/filename

따라서 일반적인 솔루션은 항상 마지막 필드 (파일 이름)를 가져와야합니다.

awk substr 함수로이 작업을 수행하는 간단한 방법이 있습니까?



답변

awk정의 할 수있는 필드 구분 기호를 기반으로 필드의 행 을 분할 하는 사실을 사용하십시오 . 따라서 필드 구분 기호를 정의하면 /다음과 같이 말할 수 있습니다.

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

NF현재 레코드의 필드 수 를 나타내는 것처럼 $NF인쇄는 마지막 레코드를 인쇄 하는 것을 의미합니다.

따라서 다음과 같은 파일이 주어집니다.

/home/parent/child1/child2/child3/filename
/home/parent/child1/child2/filename
/home/parent/child1/filename

다음과 같이 출력됩니다.

$ awk -F"/" '{print $NF}' file
filename
filename
filename


답변

이 경우 다음 basename대신 사용하는 것이 좋습니다 awk.

 $ basename /home/parent/child1/child2/filename
 filename


답변

또 다른 옵션은 bash 매개 변수 대체 를 사용하는 것 입니다.

$ foo="/home/parent/child/filename"
$ echo ${foo##*/}
filename
$ foo="/home/parent/child/child2/filename"
$ echo ${foo##*/}
filename


답변

Perl 솔루션에 열려있는 경우 여기에 fedorqui의 awk 솔루션과 유사한 솔루션이 있습니다.

perl -F/ -lane 'print $F[-1]' input

-F/지정 /필드 분리 그대로
$F[-1]마지막 요소 @F자동 구분 어레이


답변

basename 답변에 대한 주석이어야하지만 요점이 충분하지 않습니다.

큰 따옴표를 사용하지 않으면 basename공백 문자가있는 경로에서 작동하지 않습니다.

$ basename /home/foo/bar foo/bar.png
bar

좋아 따옴표 “”

$ basename "/home/foo/bar foo/bar.png"
bar.png

파일 예

$ cat a
/home/parent/child 1/child 2/child 3/filename1
/home/parent/child 1/child2/filename2
/home/parent/child1/filename3

$ while read b ; do basename "$b" ; done < a
filename1
filename2
filename3


답변

내가 3 년 늦었다는 건 알지만 .. 매개 변수 확장을 고려해야합니다. 내장되어 있고 더 빠릅니다.

입력이 var에 있으면 $ var1이라고 가정 해 봅시다 ${var1##*/}. 아래를보세요

$ var1='/home/parent/child1/filename'
$ echo ${var1##*/}
filename
$ var1='/home/parent/child1/child2/filename'
$ echo ${var1##*/}
filename
$ var1='/home/parent/child1/child2/child3/filename'
$ echo ${var1##*/}
filename


답변

5 년 후처럼 모든 제안에 감사 드리며 다음과 같은 방식으로이 작업을 수행했습니다.

$ echo /home/parent/child1/child2/filename | rev | cut -d '/' -f1 | rev
filename

더 나은 매너가 있다는 것을 알게되어 기쁩니다