标题: [文件操作] 【已解决】大文件,批处理如何对重复列添加增量序号。 [打印本页]
作者: 每天几分 时间: 2023-3-29 18:50 标题: 【已解决】大文件,批处理如何对重复列添加增量序号。
本帖最后由 每天几分 于 2023-3-29 21:36 编辑
如:
women 我们
tashi 他是
bucuo 不错
women 我闷
tashi 踏实
keng 可能
women 握闷
……
字母列遇到重复就在后面添加增量序号,不重复就默认添加1。
实现:
women1 我们
tashi1 他是
bucuo1 不错
women2 我闷
tashi2 踏实
keng1 可能
women3 握闷
……
试了用Excel 的=A1&COUNTIF($A$1:A1,A1)也能做到,但太慢了,10万词不到就崩溃了。
多谢楼下各位!
作者: 77七 时间: 2023-3-29 19:33
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in (1.txt) do (
- set /a #%%a+=1
- >>2.txt echo %%a!#%%a! %%b
- )
- endlocal
- pause
复制代码
写着玩的,可以运行几分钟,看看效率如何吗?
作者: buyiyang 时间: 2023-3-29 20:16
ps1- $content = Get-Content -Path "1.txt" -Raw
- $count = @{}
- $content -split '\r?\n' | ForEach-Object {
- $line = $_
- Select-String -InputObject $line -Pattern "\b[a-zA-Z]+\b" -AllMatches | ForEach-Object {
- $match = $_.Matches[0]
- $word = $match.Value
- if ($count.ContainsKey($word)) {
- $count[$word]++
- } else {
- $count[$word] = 1
- }
- $line = $line.Replace($word, "$word" + $count[$word].ToString())
- }
- $line
- } | Out-File -FilePath "2.txt"
复制代码
作者: hfxiang 时间: 2023-3-29 20:30
回复 1# 每天几分
请把文件1.txt保存为ANSI编码- gawk "{$1=$1(++a[$1]);print $1\" \"$2}" 1.txt>2.txt
复制代码
作者: xp3000 时间: 2023-3-29 20:38
- @if(0)==(0) echo off
- rem 保存为ANSI编码的BAT文件
- dir /b *.txt|cscript -nologo -e:jscript "%~0"
- pause & exit/b
- @end
- fso = new ActiveXObject("Scripting.FileSystemObject");
- var f = WSH.StdIn.ReadLine();
- var Name = f.match(/^(^.+)\.[^\r\n]+/)[1];
- var inFile = fso.OpenTextFile(f, 1, false);
- var outFile = fso.CreateTextFile(Name + ".log", true);
- var dict = {};
-
- while (!inFile.AtEndOfStream) {
- var line = inFile.ReadLine();
- var parts = line.split(/\s+/);
- var key = parts[0];
- var value = parts[1];
-
- if (dict[key] === undefined) {
- dict[key] = 1;
- } else {
- dict[key]++;
- }
-
- var newLine = key + dict[key] + "\t" + value;
- outFile.WriteLine(newLine);
- }
- inFile.Close();
- outFile.Close();
复制代码
作者: czjt1234 时间: 2023-3-29 20:48
10万甚至百万级别的数据,估计4楼的gawk速度最快
作者: xczxczxcz 时间: 2023-3-29 22:25
偶试了一下 PS 也很快哦!未缓存的。11万行
作者: 77七 时间: 2023-3-29 23:10
本帖最后由 77七 于 2023-3-29 23:17 编辑
回复 6# czjt1234
我把楼主的提供的样本,复制到了98万行
测试 2楼代码用时 6分钟左右;把重定向写到外面 是2分钟左右 (我太外行了...以为数据太大,该写到里面);
测试 3楼代码用时 5分钟左右;
测试 4楼代码用时 几秒;
测试 5楼代码用时 20秒左右。
作者: WHY 时间: 2023-3-30 22:47
Test.js- var srcFile = '1.txt';
- var dstFile = '2.txt';
-
- var obj = {}
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var str = fso.OpenTextFile(srcFile, 1).ReadAll();
- str = str.replace(
- /^[a-z]+\b/mig,
- function(s){
- if( !obj.hasOwnProperty(s) ) obj[s] = 1;
- return s + obj[s]++;
- }
- );
-
- fso.OpenTextFile(dstFile, 2, true).Write(str);
- WSH.Echo('Done');
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |