awkまたはsedを使用して、特定のパターンを持つ行の一部を抽出します。

awkまたはsedを使用して、特定のパターンを持つ行の一部を抽出します。

awk/operatorについて質問がありますsed。次の行が繰り返される大きなファイルがあります。

Expression loweWallrhoPhi :  sum=-6.97168e-09
Expression leftWallrhoPhi :  sum=6.97168e-09
Expression lowerWallPhi :  sum=-5.12623e-12
Expression leftWallPhi :  sum=5.12623e-12
Expression loweWallrhoUSf :  sum=-6.936e-09
Expression leftWallrhoUSf :  sum=6.97169e-09
Expression lowerWallUSf :  sum=-5.1e-12
Expression leftWallUSf :  sum=5.12624e-12

sum各場合のキーワードの後に​​出てくる値を別々のファイルに抽出したいと思います。一度に可能でしょうか?

ベストアンサー1

そしてgrep

grep -oP 'sum=\K.*' inpufile > outputfile

-P以前に一致した文字を無視するための(perl-regexp)パラメータを使用したgrepサポート\K

そしてawk

awk -F"=" '{ print $NF; }' inputfile > outputfile

存在するアッこの変数は、NF現在のレコード/行の合計フィールド数を表し、最後のフィールド番号を指すため、それ$NFに応じて値が割り当てられます。

そしてsed

sed 's/^.*sum=//' inpufile > outputfile

^.*=sum.*行の最初の文字()と最後の文字()の間の^すべての文字()をsum=空白文字に置き換えます。

結果:

-6.97168e-09
6.97168e-09
-5.12623e-12
5.12623e-12
-6.936e-09
6.97169e-09
-5.1e-12
5.12624e-12

そしてcut

cut -d'=' -f2 inputfile > outputfile

同じ値を同じファイルに別々に保存するには、awk次のようにします。

awk -F"=" '{print $NF >($NF); }' inputfile > outputfile

おすすめ記事