itsource

bash를 사용하여 각 행의 마지막 단어를 얻으려면 어떻게 해야 합니까?

mycopycode 2023. 4. 22. 09:27
반응형

bash를 사용하여 각 행의 마지막 단어를 얻으려면 어떻게 해야 합니까?

예를 들어 다음과 같은 파일이 있습니다.

$ cat file

i am the first example.

i am the second line.

i do a question about a file.

그리고 나는 다음이 필요하다.

example, line, file

'awk'를 의도하고 있지만, 문제는 단어들이 다른 공간에 있다는 것이다.

해라

$ awk 'NF>1{print $NF}' file
example.
line.
file.

예시와 같이 한 줄로 결과를 얻으려면 다음과 같이 하십시오.

{
    sub(/\./, ",", $NF)
    str = str$NF
}
END { print str }

출력:

$ awk -f script.awk file
example, line, file, 

순수 배시:

$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file
example.
line.
file.

GREP를 사용하면 간단하게 할 수 있습니다.

grep -oE '[^ ]+$' file

(-E확장 정규식을 사용한다.-o전체 행이 아닌 일치하는 텍스트만 출력합니다.

다음과 같은 작업을 수행할 수 있습니다.

awk '{ print $NF }'

편집: 행이 비어 있지 않도록 하려면:

awk 'NF{ print $NF }'

이것을 플레인 배시로 하는 또 다른 방법은,rev명령어는 다음과 같습니다.

cat file | rev | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","

기본적으로는 파일의 행을 반대로 한 다음 분할합니다.cut구분 기호로 공백을 사용하여 다음 첫 번째 필드를 선택합니다.cut토큰을 생성하고 다시 되돌립니다.tr -d불필요한 문자를 삭제하다tr줄바꿈 문자를 다시 바꿉니다.,

또, 다음의 방법으로 첫 번째 고양이를 피할 수 있습니다.

rev < file | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","

tldr;

$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'

이런 파일에는

$ cat file.txt
The quick brown fox
jumps over
the lazy dog.

지정된 명령어가 출력됩니다.

fox, over, dog.

구조:

  • awk '{print $NF}': 각 행의 마지막 필드를 인쇄합니다.
  • paste -sd,: 읽기stdin시리얼 (-s, 한 번에 1개의 파일) 및 필드를 쉼표로 구분하여 씁니다( ).-d,)
  • sed 's/,/, /g':sUbitutes(부재)","와 함께", " globally(모든 인스턴스)

참고 자료:

여러 가지 방법이 있다.~하듯이awk솔루션에서 알 수 있듯이 깨끗한 솔루션입니다.

sed 솔루션은 마지막 공백까지 삭제하는 것입니다.그래서 끝에 공간이 없으면 작동해야 합니다.

sed 's/.* //g' <file>

피할 수 있다sed그리고 또 한 번지while고리.

while read line
do [ -z "$line" ] && continue ;
echo $line|rev|cut -f1 -d' '|rev
done < file

행을 읽고 존중하며 첫 번째(즉, 원본의 마지막)를 자르고 복원한다.

같은 방법으로 할 수 있다

while read line
do [ -z "$line" ] && continue ;
echo ${line##* }
done < file

파라미터 확장이라고 불립니다.

마지막 워드에 대해 perl 원라이너를 시작하는 경우:

perl -lane 'print "$F[-1]"'

...어디에-a에 자동 플릿을 부여하다@F그리고.$F[-1]마지막 요소입니다.

쉼표가 있는 목록으로 변환하려면:

perl -ane 'print "$F[-1]" . (eof() ? "\n":",")'

언급URL : https://stackoverflow.com/questions/16616975/how-do-i-get-the-last-word-in-each-line-with-bash

반응형