Bashスクリプトを使用した数値の抽出

Bashスクリプトを使用した数値の抽出

抽出したい情報を含むテキストファイルがあります。

PATTERN 1
bla bla bla.. XYSS$40$$$3 bla bla...    
bla bla bla..
bla bla bla.. GNDC$3$$$23 bla bla bla..

XYSS$40$$$340 x 3を抽出して乗算し、その結果を行番号で画面に表示したいと思います。

についても同様ですGNDC$3$$$23

PATTERN2
bla bla bla.. KKKK$4$60 bla bla bla..
bla bla bla..
bla bla bla.. PPPP$10$3 bla bla bla..

KKKK$4$604 x 60を抽出して乗算し、その結果を行番号で画面に表示したいと思います。

答え1

Linuxを使用している場合は、おそらくPerlを使用しています。

$ cat input1 
PATTERN 1
bla bla bla.. XYSS$40$$$3 bla bla...    
bla bla bla..
bla bla bla.. GNDC$3$$$23 bla bla bla..

$ perl -ne 'while (/[A-Z]{4}\$+(\d+)\$+(\d+)/g) { 
    printf "line %3d: $1 * $2 = %d\n", $., $1*$2; }' < input1
line   2: 40 * 3 = 120
line   4: 3 * 23 = 69

正規表現パターンは、4つの大文字([A-Z]{4})、いくつかのドル記号(\$+)、最後に数字((\d+))、ドル、および数字を再一致させます。括弧は数字の合計をキャプチャし、現在の行番号を$1含みます。味を変えてみてください。$2$.printf

答え2

使用gawk:

gawk 'match($0, /[A-Z]{4}\$+([0-9]+)\$+([0-9]+)/, nums) { 
   print "Line number: "NR", result: "nums[1]*nums[2] 
}' file

関連情報