특정 단어 뒤에 값 가져오기

특정 단어 뒤에 값 가져오기

이 파일이 있어요

1 deiauk David Smith from California 12 58
2 edvin from Nevada 12 5 8 95 2 48 5
3 jaco My Name Is Jacob I'm from NY 5  6  845 156 585
4 from Miami

특정 단어 뒤에 있는 값을 가져와야 합니다. from쉘에서 이 작업을 수행할 수 있습니까? 내 출력은

California
Nevada
NY
Miami

답변1

를 사용하려면 grep다음과 같이 하면 됩니다.

grep -oP "from\s+\K\w+" input.txt

여기,

-o  ==>  option for printing only the matching part of the line
-P  ==>  use perl-regexp
\K  ==>  do not print that comes before \K (zero-width look-behind assertion)
\w  ==>  match word characters

답변2

또는:

awk '{for (I=1;I<NF;I++) if ($I == "from") print $(I+1)}' file

답변3

읽을 수 있는 해결책은 다음과 같습니다:

awk -F '${fixed_string}' '{print $2}' file | awk '{print $1}'

할 수 있는 작업:

  • -F '${fixed_string}'입력을 주어진 문자열 앞과 뒤로 나눕니다. 따라서 파일을 설정하면 다음 fixed_string='from'print $2제공됩니다.

    California 12 58 Nevada 12 5 8 95 2 48 5 NY 5 6 845 156 585 Miami

  • 이제 필요한 것은 이 입력의 첫 번째 열뿐입니다. 따라서 첫 번째 출력을 awk파이프 awk하고 첫 번째 열을 인쇄합니다.

답변4

파일 이름이 test.txt라고 가정합니다.

$ cat test.txt
deiauk David Smith from California 12 58
edvin from Nevada 12 5 8 95 2 48 5
jaco My Name Is Jacob I'm from NY 5  6  845 156 585
from Miami

grep을 사용하여 sed모든 것을 찾을 수 있으며 from출력은 cut다음과 같습니다.

$ cat test.txt | sed 's/.*from //' | cut -d " " -f 1
California
Nevada
NY
Miami

관련 정보