如何在Linux上用Perl提取文件中的最后一个整数/小数?
问题描述
我在Linux机器上有mem1.txt、mem2.txt、mem3.txt这类JSON格式文件,每个文件结构类似示例内容。需要用Perl提取每个文件中最后一个整数或小数(即values数组里第二个元素的字符串值),要求输出不带引号的数值,且希望用单条命令实现。
解决方案
方法一:使用JSON解析(推荐,更可靠)
利用Perl的JSON模块解析文件结构,精准定位目标值,不受JSON格式换行、空格变化影响。命令如下:
perl -MJSON -0777 -ne 'print decode_json($_)->{data}{result}[0]{values}[0][1], "\n"' mem*.txt
命令解释:
-MJSON:加载Perl的JSON处理模块-0777:一次性读取整个文件内容,避免逐行解析JSON的结构问题-ne:循环处理每个目标文件的内容decode_json($_):将文件内容解析为可操作的JSON对象->{data}{result}[0]{values}[0][1]:按JSON层级导航到目标数值所在位置print ... "\n":输出提取的数值并自动换行
方法二:使用正则表达式(快速但依赖固定格式)
若无法使用JSON模块,可通过正则匹配最后一个带引号的数值字符串,适用于格式稳定的场景:
perl -ne 'if (/\"(\d+\.?\d*)\"/) { $val = $1 } if eof { print "$val\n"; $val = "" }' mem*.txt
命令解释:
-ne:逐行处理每个目标文件/\"(\d+\.?\d*)\"/:匹配带引号的整数或小数,捕获引号内的数值部分if eof:当处理到文件末尾时,输出捕获的最后一个数值并重置变量
预期输出
执行任一命令后将得到:
8589934592 1.02 4
内容的提问来源于stack exchange,提问作者Sawan Kumar
相关产品推荐
相关产品推荐

