提取一行字符串中的整数

提取一行字符串中的整数

我在从文本文件中提取数字时遇到一些问题。基本上,它看起来像这样(全部在一行;为了稍微提高可读性而在此处分开):

[{"id":1,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197540,"frame_content":"some other informations...},
{"id":2,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197552,"frame_content":"some other informations...},
{"id":3,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197556,"frame_content":"some other informations...},
{"id":4,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197558,"frame_content":"some other informations...},
and so on.....]

我想做的是提取时间戳标签后的所有值。问题是我的文件仅由一行组成这使得它有点棘手,我认为我无法改变这一点。在互联网上查找解决方案后,我尝试了sed和命令,但到目前为止还没有成功。grep

我将不胜感激任何有关此事的帮助:)

谢谢你!

答案1

假设该文件是格式良好的 JSON 文件,您应该使用 JSON 解析器来解析它。

使用jq文件上的 JSON 解析器:

$ jq '.[] | .timestamp' filename.json
1510690197540
1510690197552
1510690197556
1510690197558

该表达式.[] | .timestamp对数组中的所有对象创建隐式循环,并timestamp从每个对象中提取值。

也可以写成

$ jq '.[].timestamp' file.json

无关:

要找到id具有最大值的对象timestamp

$ jq 'max_by(.timestamp).id' file.json
4

要漂亮地打印 JSON 文件:

$ jq . file.json

答案2

您可以使用

grep -oP '"timestamp":\s*\K\d+' filename

如果所有内容都在一行上并不重要,它会搜索字符串“timestamp:”之后出现的所有数字

结果 :

1510690197540
1510690197552
1510690197556
1510690197558

答案3

awk解决方案:

awk -F, '{ for (i=1;i<=NF;i++) { if ($i~/timestamp/) { split($i,slt,":");print slt[2]  } } }' filename

结果:

1510690197540
1510690197552
1510690197556
1510690197558

循环遍历由逗号分隔的每个字段,然后将字段和模式与时间戳进行匹配。如果存在匹配项,则使用 : 将字段拆分为数组 slt。然后打印数组的第二个元素。

相关内容