特定の単語の後に値を取得する

特定の単語の後に値を取得する

このファイルがあります。

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

関連情報