需要使用awk或类似工具打印/输出JSON文件的部分行的帮助吗

需要使用awk或类似工具打印/输出JSON文件的部分行的帮助吗,awk,sed,printing,grep,cat,Awk,Sed,Printing,Grep,Cat,在下面的示例中,我需要重新调整第5行第2组引号中的内容,最多调整到小数点,但不能超过小数点 引号的内容各不相同,因此必须捕获“和之间的所有内容,并且不能使用基于这两者之间任何内容的搜索字符串进行匹配 也有可能在将来,行号可能会改变,但是,始终可以通过搜索“项目”来找到该行 由于专有环境/操作系统的限制,该过程应利用awk、grep、cat、sed或它们的组合。我已经四处搜索过,但找不到任何符合要求的东西 文件名:data.json 成功输出的一个例子是: 12-ct_Large_Grade_A(

在下面的示例中,我需要重新调整第5行第2组引号中的内容,最多调整到小数点,但不能超过小数点

引号的内容各不相同,因此必须捕获
之间的所有内容,并且不能使用基于这两者之间任何内容的搜索字符串进行匹配

也有可能在将来,行号可能会改变,但是,始终可以通过搜索“项目”来找到该行

由于专有环境/操作系统的限制,该过程应利用
awk
grep
cat
sed
或它们的组合。我已经四处搜索过,但找不到任何符合要求的东西

文件名:data.json

成功输出的一个例子是:

12-ct_Large_Grade_A(Brown_Organic)

完全依赖面向行的工具来操作JSON的要求似乎是非常错误的。在操作结构化格式时,请使用理解结构化格式的工具

jq '.Item|split(".")[0]' data.json
提取至第一个点;或

jq '.Item|sub("[.][^.]*$";"")' data.json
放弃从最后一个点到字段末尾的文本

jq
不喜欢伪JSON中
后多余的最后一个逗号。)

毫无疑问,在任何人的心目中,你所说的尖锐问题都可以用一个简单的Awk或
sed
脚本来解决。然后发生的事情——这里已经发生的事情——是你发现了从你发布的玩具示例中不明显的额外需求。一个合适的、可移植的解决方案可以处理带有字符串的JSON示例嵌入逗号和转义双引号,并在表面JSON格式更改时继续工作,因为上游某处的组件已更新为将所有JSON放在一行或任何内容上。

以下是一个awk:

awk -F'.' '/Item/{split(substr($0,1,L=length($0)-length($NF)-1),a,"\"");print a[4]}'
12.ct.Large.Grade.A(Brown_Organic)
它搜索
项目
,然后从
打印到最新的


拆分字符串 查找拆分后最新零件的长度
长度($NF)

从总计中提取此长度以查找最新的
长度($0)-长度($NF)


然后用
并打印第四部分。

嗨,迈克,欢迎来到SO。我建议您先考虑解析JSON,然后处理您的值细节将变得容易得多。另外,请添加您已经尝试过的方法,以及一些您希望获得的预期结果的示例,这样您的问题就不会被视为只是一个“帮我一个忙”的工作描述。嗨,谢谢您的反馈。我真的不知道我在做什么。我有一本关于linux的书,它没有给出太多的例子。我使用过cat和grep以及awk示例,可以打印出页面的部分内容,但似乎永远无法得到我想要的结果。我会尽可能地更新帖子谢谢您的示例输入文件看起来更像一个JSON文件,而不是一个随机文本,您是否还有几行关于它的示例?这就是.JSON文件的全部内容。对不起,当我说随机化时,我指的是我需要提取的总是不同的值(“项”:“这里的值从来都不是相同的”。或者这里的值)。Mike我认为这个问题需要在可用工具、运行环境工具集和版本、实际输入示例、,实际输出示例和问题背后的实际目标。不幸的是,虽然此注释可能对其他人有所帮助,但jq不是此专有环境/操作系统上的选项。但是,如果字段包含其他点,则此操作将失败。OP评论了一个现在被删除的答案,并附加了一个要求(可以说这个问题应该用这个信息更新)。@tripleee更新为最新版本。知道为什么有人给出-1总是很好的。。。
awk -F'.' '/Item/{split(substr($0,1,L=length($0)-length($NF)-1),a,"\"");print a[4]}'
12.ct.Large.Grade.A(Brown_Organic)