我有一个文本文件,其中包含我要提取的信息:
PATTERN 1
bla bla bla.. XYSS$40$$$3 bla bla...
bla bla bla..
bla bla bla.. GNDC$3$$$23 bla bla bla..
我想提取XYSS$40$$$3
并乘以 40 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$60
并乘以 4 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
正则表达式模式匹配四个大写字母 ( [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