标题: [文本处理] 【已解决】gawk:统计文本中特定字符的个数,据此统计另一文本中具有同样个数的字符 [打印本页]
作者: 思想之翼 时间: 2024-12-5 17:26 标题: 【已解决】gawk:统计文本中特定字符的个数,据此统计另一文本中具有同样个数的字符
本帖最后由 思想之翼 于 2024-12-5 19:25 编辑
D:\DATA\1.txt 记录字符:
中国 中国 中国 美国
欧盟 法国 法国 德国
D:\DATA\2.txt 记录字符:
中国 美国 美国
法国 法国 法国 法国
英国 德国 美国 德国
中国 中国
如何使用gawk工具,先统计 1.txt 中特定字符“中国”的出现次数N,上例N=3,(特定字符“中国”预先写入代码,而非在代码运行过程中弹出页面手动输入),
据此,统计 2.txt 中出现次数N=3的字符,上例N=3的字符为 中国 美国,写入D:\DATA\3.txt
最终输出结果:
3.txt
中国 美国
【注】下列代码,统计 1.txt 2.txt 字符出现次数:- gawk -v"RS=\r?\n| " "{++a[$0][FILENAME];f[FILENAME]}END{PROCINFO[\"sorted_in\"]=\"@ind_str_desc\";for(i in a)for(j in f)if(!a[i][j]){};for(i in a){printf i;s=1;for(j in a[i]){sId=s?\":\":\",\";printf sId\" %s 记录 %d 次\",j,a[i][j];s=0}print\"\"}}" 1.txt 2.txt>3.txt
复制代码
3.txt结果:
中国: 2.txt 记录 3 次, 1.txt 记录 3 次
英国: 2.txt 记录 1 次, 1.txt 记录 0 次
欧盟: 2.txt 记录 0 次, 1.txt 记录 1 次
美国: 2.txt 记录 3 次, 1.txt 记录 1 次
法国: 2.txt 记录 4 次, 1.txt 记录 2 次
德国: 2.txt 记录 2 次, 1.txt 记录 1 次
作者: aloha20200628 时间: 2024-12-5 18:43
本帖最后由 aloha20200628 于 2024-12-5 18:47 编辑
回复 1# 思想之翼
快递一个 bat+gawk 版本,用 gawk.exe v4.1.3版测试通过...- @echo off &cd /d "d:\data" &setlocal &set "c=中国"
- for /f %%n in (
- 'awk "{c+=gsub(/%c%/,\"﹢\")}END{print c}" 1.txt') do (for /f "delims=" %%a in (
- 'awk "FNR==1{No++}{for(i=0;i++<NF;)a[No][$i]=1}END{for(i in a)for(k in a[i])if(++d[k]==No)print k}" 1.txt 2.txt'
- ) do for /f %%v in (
- 'awk "{c+=gsub(/%%a/,\"﹢\")}END{print c}" 2.txt') do if %%v equ %%n set/p="%%a "<nul)>3.txt
- endlocal&pause&exit/b
复制代码
作者: hfxiang 时间: 2024-12-5 18:57
回复 1# 思想之翼 - gawk -v"RS=\r?\n| " -v"s=中国" "NR==FNR{if($0==s)n++;next}{++a[$0]}END{for(i in a)if(a[i]==n)printf\"%s \",i}" 1.txt 2.txt>3.txt
复制代码
作者: Five66 时间: 2024-12-5 19:26
直接读取1楼代码生成的3.txt来判断次数- gawk -v"N=3" -F"[ :]" "{if($5==N){a=$1\" \";printf(a)}}" 3.txt >3.3.txt
- move /y 3.3.txt 3.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |