免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10685 | 回复: 4

[文本处理] 打印有重复id的文件 [复制链接]

论坛徽章:
0
发表于 2022-06-11 16:36 |显示全部楼层
文件路径
/storage-28-100/a.json
/storage-28-110/a.json
/storage-28-137/a.json
/storage-28-143/a.json
/storage-28-108/a.json
/storage-28-97/a.json
/storage-28-138/a.json
/storage-28-158/a.json
/storage-28-109/a.json
/storage-28-142/a.json
/storage-28-141/a.json
/storage-28-136/a.json
/storage-28-144/a.json

cat /storage-*/a.json 得到以下文本,每一个{}里包含的文本为一个a.json文件,每个文件的}后面没有换行符

{
  "ID": "d8a18feb-ce42-4f4a-a14a-a0c5716a159d",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true
}{
  "ID": "d8a18feb-ce42-4f4a-a14a-a0c5716a159d",
  "Weight": 10,
  "CanSeal": false,
  "CanStore": true
}{
  "ID": "5c752135-6037-442a-b9d1-cad111974e15",
  "Weight": 10,
  "CanSeal": false,
  "CanStore": true
}{
  "ID": "08a241ab-ffa6-4795-8018-42d696d2cfbb",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true
}{
  "ID": "2fb6a047-a801-47ed-9990-8b376843a2cb",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "2fb6a047-a801-47ed-9990-8b376843a2cb",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "a8b5352e-239e-4e7d-9b58-a4909b9120b1",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "62d71c03-55af-4367-8f1c-cf1301c4fa92",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "477c4f23-0dce-4717-a12d-027f8d4bbced",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "ea0b5a91-fcb5-40b0-85b6-1e2890c16e7d",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "f34644f9-c07e-4c48-9c8a-8b2145731273",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "5ee5d307-2635-436c-9323-d451745104af",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true,
  "MaxStorage": 0
}{
  "ID": "c2a37ab5-110e-4329-ba25-bd1dfde9e441",
  "Weight": 10,
  "CanSeal": true,
  "CanStore": true
}

通过一行命令实现将重复的id给打印出来,实现的效果如下

28-100  d8a18feb-ce42-4f4a-a14a-a0c5716a159d
28-110  d8a18feb-ce42-4f4a-a14a-a0c5716a159d
28-108  2fb6a047-a801-47ed-9990-8b376843a2cb
28-97   2fb6a047-a801-47ed-9990-8b376843a2cb


论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2022-06-14 16:04 |显示全部楼层
本帖最后由 wh7211 于 2022-06-14 16:11 编辑
  1. awk '/ID/{split(FILENAME,a,"[-/]");b=a[2]"-"a[3];c=gensub("[\",]","","g",$2);d[c]=d[c]?d[c]"\n"b" "c:b" "c}END{for(i in d){if(d[i]~"\n"){print d[i]}}}' storage-*/a.json
  2. 28-100 d8a18feb-ce42-4f4a-a14a-a0c5716a159d
  3. 28-110 d8a18feb-ce42-4f4a-a14a-a0c5716a159d
  4. 28-108 2fb6a047-a801-47ed-9990-8b376843a2cb
  5. 28-97 2fb6a047-a801-47ed-9990-8b376843a2cb
复制代码

  1. cat 1
  2. /storage-28-100/a.json
  3. /storage-28-110/a.json
  4. /storage-28-137/a.json
  5. /storage-28-143/a.json
  6. /storage-28-108/a.json
  7. /storage-28-97/a.json
  8. /storage-28-138/a.json
  9. /storage-28-158/a.json
  10. /storage-28-109/a.json
  11. /storage-28-142/a.json
  12. /storage-28-141/a.json
  13. /storage-28-136/a.json
  14. /storage-28-144/a.json

  15. cat 2
  16. {
  17.   "ID": "d8a18feb-ce42-4f4a-a14a-a0c5716a159d",
  18.   "Weight": 10,
  19.   "CanSeal": true,
  20.   "CanStore": true
  21. }{
  22.   "ID": "d8a18feb-ce42-4f4a-a14a-a0c5716a159d",
  23.   "Weight": 10,
  24.   "CanSeal": false,
  25.   "CanStore": true
  26. }{
  27.   "ID": "5c752135-6037-442a-b9d1-cad111974e15",
  28.   "Weight": 10,
  29.   "CanSeal": false,
  30.   "CanStore": true
  31. }{
  32.   "ID": "08a241ab-ffa6-4795-8018-42d696d2cfbb",
  33.   "Weight": 10,
  34.   "CanSeal": true,
  35.   "CanStore": true
  36. }{
  37.   "ID": "2fb6a047-a801-47ed-9990-8b376843a2cb",
  38.   "Weight": 10,
  39.   "CanSeal": true,
  40.   "CanStore": true,
  41.   "MaxStorage": 0
  42. }{
  43.   "ID": "2fb6a047-a801-47ed-9990-8b376843a2cb",
  44.   "Weight": 10,
  45.   "CanSeal": true,
  46.   "CanStore": true,
  47.   "MaxStorage": 0
  48. }{
  49.   "ID": "a8b5352e-239e-4e7d-9b58-a4909b9120b1",
  50.   "Weight": 10,
  51.   "CanSeal": true,
  52.   "CanStore": true,
  53.   "MaxStorage": 0
  54. }{
  55.   "ID": "62d71c03-55af-4367-8f1c-cf1301c4fa92",
  56.   "Weight": 10,
  57.   "CanSeal": true,
  58.   "CanStore": true,
  59.   "MaxStorage": 0
  60. }{
  61.   "ID": "477c4f23-0dce-4717-a12d-027f8d4bbced",
  62.   "Weight": 10,
  63.   "CanSeal": true,
  64.   "CanStore": true,
  65.   "MaxStorage": 0
  66. }{
  67.   "ID": "ea0b5a91-fcb5-40b0-85b6-1e2890c16e7d",
  68.   "Weight": 10,
  69.   "CanSeal": true,
  70.   "CanStore": true,
  71.   "MaxStorage": 0
  72. }{
  73.   "ID": "f34644f9-c07e-4c48-9c8a-8b2145731273",
  74.   "Weight": 10,
  75.   "CanSeal": true,
  76.   "CanStore": true,
  77.   "MaxStorage": 0
  78. }{
  79.   "ID": "5ee5d307-2635-436c-9323-d451745104af",
  80.   "Weight": 10,
  81.   "CanSeal": true,
  82.   "CanStore": true,
  83.   "MaxStorage": 0
  84. }{
  85.   "ID": "c2a37ab5-110e-4329-ba25-bd1dfde9e441",
  86.   "Weight": 10,
  87.   "CanSeal": true,
  88.   "CanStore": true
  89. }

  90. awk 'FILENAME==ARGV[1]{split($0,a,"[-/]");b[NR]=a[3]"-"a[4]}FILENAME==ARGV[2]&&/ID/{c++;d=gensub("[\",]","","g",$2);e[d]=e[d]?e[d]"\n"b[c]" "d:b[c]" "d}END{for(i in e){if(e[i]~/\n/){print e[i]}}}' 1 2
  91. 28-100 d8a18feb-ce42-4f4a-a14a-a0c5716a159d
  92. 28-110 d8a18feb-ce42-4f4a-a14a-a0c5716a159d
  93. 28-108 2fb6a047-a801-47ed-9990-8b376843a2cb
  94. 28-97 2fb6a047-a801-47ed-9990-8b376843a2cb
复制代码

论坛徽章:
0
发表于 2022-06-14 17:05 |显示全部楼层
回复 2# wh7211

非常感谢,辛苦了,awk无比炉火纯青啊!

论坛徽章:
0
发表于 2022-11-16 15:44 |显示全部楼层
本帖最后由 ll251 于 2022-11-16 15:50 编辑
  1. awk 'BEGIN{
  2.                    num=1;
  3.                  }
  4.                  ARGIND=1 && /ID/{                        
  5.                    a[$0]++;b[num++]=$0;next                        
  6.                  }
  7.                  ARGIND=2{
  8.                    split($0,e,"[/-]");d[FNR]=e[3]"-"e[4]" ";next
  9.                  }
  10.                  END{
  11.                    for(j=1;j<num;j++){
  12.                      if(a[b[j]]>1){
  13.                        printf d[j]" ";
  14.                        split(b[j],c,"[\"]");print c[4]                        
  15.                      }
  16.                    }
  17.                  }' 2 1
复制代码

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
发表于 2022-11-17 22:18 |显示全部楼层
本帖最后由 klainogn 于 2022-11-17 22:20 编辑
  1. awk -vFS='"' '/ID/{a[$4]++}END{f=gensub(/storage-|\/a.json/, "","g", FILENAME);for(i in a){if(a[i]>1)print f"\t"i}'} storage-28-110/a.json
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP