You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:06:26