web-dev-qa-db-ja.com

同じ行の特定の単語の後に1つの単語を抽出する

Linux(csh)で特定の単語の後に続く単語を抽出するにはどうすればよいですか?より正確には、次のような1行のファイルがあります。

[some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data]

100は、--pe_cntワードの後ろにある数字を抽出したい。行全体を抽出する場合にのみ機能するため、sedは使用できません。多分私はawkを使うことができますか?

また、100の代わりに異なる値を持つ複数のファイルがあるため、値を抽出するが値に依存しないものが必要です。

16
Rahul

awkの場合:

awk '{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}' inputFile

基本的に、行の各Wordをループします。最初に探しているものが見つかったら、次のWordを入手して印刷します。

grepの場合:

grep -oP "(?<=--pe_cnt )[^ ]+" inputFile
31
jaypal singh

Sedを使用できます。一致させたいグループを作成し、行全体をグループに置き換えます。

sed -n 's/^.*pe_cnt\s\+\([0-9]\+\).*$/\1/p' file
6
ctn

--pe_cnt100の間にシングルスペース文字がある場合、先読みと後読みのアサーションを使用できる場合があります

grep -oP '(?<=--pe_cnt\s)\d+(?=\s+--rd_cnt)'
1
iruvar