Linux(csh)で特定の単語の後に続く単語を抽出するにはどうすればよいですか?より正確には、次のような1行のファイルがあります。
[some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data]
100
は、--pe_cnt
ワードの後ろにある数字を抽出したい。行全体を抽出する場合にのみ機能するため、sedは使用できません。多分私はawkを使うことができますか?
また、100
の代わりに異なる値を持つ複数のファイルがあるため、値を抽出するが値に依存しないものが必要です。
awk
の場合:
awk '{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}' inputFile
基本的に、行の各Wordをループします。最初に探しているものが見つかったら、次のWordを入手して印刷します。
grep
の場合:
grep -oP "(?<=--pe_cnt )[^ ]+" inputFile
Sedを使用できます。一致させたいグループを作成し、行全体をグループに置き換えます。
sed -n 's/^.*pe_cnt\s\+\([0-9]\+\).*$/\1/p' file
--pe_cnt
と100
の間にシングルスペース文字がある場合、先読みと後読みのアサーションを使用できる場合があります
grep -oP '(?<=--pe_cnt\s)\d+(?=\s+--rd_cnt)'