【问题标题】:Remove almost duplicate content in a json file删除 json 文件中几乎重复的内容
【发布时间】:2015-03-04 21:32:53
【问题描述】:

我有一个 json 文件,我有几乎重复内容的行(每行添加一个数组值),但我只需要最后一行,包含所有数组值。 (下例中的第 3 行)

我想遍历文件并检查每行的前 100 个字符(这些在重复项中是相同的),然后只保留一组(几乎)重复项的最后(完整)行。

几乎是很重要的;例如,我不能使用 uniq,因为这些行不是 100% 唯一的(请参阅在 media_url 中添加的元素)

例子:

{"project": {"bodytext": ["long text"], "media": [{"media_url": ["files//1"]}]}, ]},

{"project": {"bodytext": ["long text"], "media": [{"media_url": ["files//1"],["files//2"]}]}, ]},

{"project": {"bodytext": ["long text"], "media": [{"media_url": ["files//1"],["files//2"],["files//3"]}]}, ]}, <- only keep this line

任何帮助将不胜感激。我更喜欢用 bash 脚本来解决这个问题。

谢谢

【问题讨论】:

  • 我不认为bash 是合适的工具。使用真正的编程语言(如python),将json解析为一些数据结构,比较数据结构并丢弃那些子集。
  • 这里没有足够的信息来考虑在 shell 中制作解决方案。如果它像您说明的那样简单,tail -1 jsonFile 不会成功吗?如果没有,您如何添加一些步骤以便我们可以复制您的问题数据?祝你好运。

标签: bash


【解决方案1】:

正如其他人已经解释的那样,Bash 不是解决您的问题的理想工具。

如果您想坚持您的方法,您可以对文件进行反向排序,然后指示 uniq 仅比较前 n 个字符,例如:

sort -r testfile | uniq -w 60

有关详细信息,请参阅 uniq(1) 手册页。

【讨论】:

  • 这是一个好的开始!谢谢,我这样解决了:tac items.json |排序 | uniq -w 150 > tacsorteduniq.json tac 反转了行,按字母顺序对行进行排序,所以它们会被分组,然后我用 uniq 得到重复项一个挑战。尝试不同的工具是件好事,因为它会迫使您以其他方式思考。
  • 感谢您的反馈。 tac 在倒车方面真的比sort -r 做得更好吗?
  • 如果你不介意,如果你接受我的回答或添加你自己的回答会很棒:-)
  • sort -r 在输入文件更改时给了我意想不到的结果。实在想不通是什么问题。 tac 工作没有任何问题。
【解决方案2】:

我是这样解决的:

tac items.json |排序 | uniq -w 150 > tacsorteduniq.json

【讨论】:

  • 这也可以,没有 uniq(uniq -w 命令在 macintosh 上不可用) gtac 23112015.json |排序 -k 1,10 -u > 2311sorted.json
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 2011-06-01
  • 1970-01-01
  • 2016-10-09
  • 2020-12-10
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多