找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21796|回复: 11

[文本处理] 批处理怎样按第1列最后一个字符指定排列?

[复制链接]
发表于 2023-10-27 19:47:38 | 显示全部楼层 |阅读模式
本帖最后由 娜美 于 2023-10-27 23:59 编辑

需要批量处理多个文件   处理后原文件名称不变,  在各个文件名添加tmp后缀就行      如 a.txt.tmp   
制表符为分隔    bat按第1列的最后一个字符重新排列行次序     例如要指定最后一个字符排列顺序  "1| 2| 3 |4 |5 |0"
谢谢

按第1列最后一个字符指定排列
例 这第1列最后一个字符
1*2*0*00*0*0*0*4*52                23.10.2023 10:52:38 35262

https://wwkt.lanzoul.com/iAuSc1d1p2pi
需要批量处理多个文件,    详细可请看连接示例
谢谢
 楼主| 发表于 2023-10-27 19:51:58 | 显示全部楼层
本帖最后由 娜美 于 2023-10-27 19:56 编辑

代码框里的字体看起来是不是有点过于小呢?   不知道是网页还是平台设的, 代码框里的字体和外框字体比例似乎不适合是吗 ?     想变大代码框里的字体似乎会混乱
发表于 2023-10-27 20:16:00 | 显示全部楼层
  1. @echo off
  2. (for %%a in (1 2 3 4 5 0) do (
  3.         findstr /rc:"-[a-z0-9]%%a" a.txt |sort
  4. ))>b.txt
  5. pause
复制代码
 楼主| 发表于 2023-10-27 21:01:56 | 显示全部楼层
本帖最后由 娜美 于 2023-10-27 21:22 编辑

回复 3# 77七

似乎不能处理有超长字符行
sorry   忘了说有些文件长度有些行超600个字符的,  对了我还忘了需要批量处理多个文件
哥哥   分隔符需要是制表符, 不能是 "-" 哦      我重新编了主题
发表于 2023-10-27 21:52:03 | 显示全部楼层
回复 4# 娜美


    请找一个包含超长字符串的文件上传到网盘以便测试
 楼主| 发表于 2023-10-27 23:57:25 | 显示全部楼层
回复 5# Batcher

ok 谢谢哥哥提醒
    https://wwkt.lanzoul.com/iAuSc1d1p2pi
发表于 2023-10-28 06:12:37 | 显示全部楼层
回复 4# 娜美


    6楼样本里的通配符,不知道指什么?
如果文本有规律可寻,你可以把真实的文本,比如数字用数字替代,不同数字用不同数字替代,汉字同样处理,保留符号不变,仿制真实的数据提供。

这样样本测试通过,就不会存在问题了,否则样本不能代表实际情况,也失去样本的意义。
发表于 2023-10-28 07:53:24 | 显示全部楼层
  1. @if (0)==(0) echo off
  2. cscript -nologo -e:jscript %0<a.txt>b.txt
  3. pause & exit
  4. @end
  5. var arr = WSH.StdIn.ReadAll().split(/[\r\n]+/);
  6. pad = function(n) { return n>0 ? n : 10 };
  7. WSH.Echo(arr.sort(function(a,b) { return pad(a.split(/[\t]+/)[0].slice(-1)) - pad(b.split(/[\t]+/)[0].slice(-1)) }).join('\n'));
复制代码
发表于 2023-10-28 08:56:25 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-10-28 10:14 编辑

上传文件最好是一个真实文件,最起码也是真实文件的片段(如果有不便显示全部内容的话),如果随便造一个文件传上来,那么与胡乱写写,然后贴出来又有何区别呢。
    如果像你提供的样本,第一列最后一个字符都是数字的话:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3.     (for /f "tokens=1* delims=        " %%j in ('type "%%i"') do (
  4.         set "str=%%j"
  5.         setlocal enabledelayedexpansion
  6.         set "n=!str:~-1!"
  7.         if !n! equ 0 (
  8.             echo,a        %%j        %%k
  9.         ) else (
  10.             echo,!n!        %%j        %%k
  11.         )
  12.         endlocal
  13.     ))>temp
  14.     (for /f "tokens=1* delims=        " %%j in ('sort temp') do echo,%%k)>%%i.tmp
  15. )
  16. del temp
复制代码
发表于 2023-10-28 09:11:16 | 显示全部楼层
只单纯的按"1| 2| 3 |4 |5 |0"顺序分组,不再对分组进行排序
a.txt编码ansi或gbk
保存为ansi编码的bat

  1. @if (0)/*==(0)/* echo off

  2. cscript //nologo //e:jscript "%~f0" <a.txt >a.txt.tmp

  3. echo done&pause
  4. rem */@end

  5. var aaa="1| 2| 3 |4 |5 |0";
  6. var s='\t';
  7. aaa=aaa.replace(/ /g,'').split(/\|/);
  8. aaa.push('and so on');

  9. var nil=null,hash={},i;
  10. var puts=function(s){WScript.Echo(s);};
  11. for(i in aaa){hash[i]=[];}
  12. hash['and so on']=[];

  13. var f,g;
  14. while (!WScript.StdIn.AtEndOfStream) {
  15. f = WScript.StdIn.ReadLine();
  16. if(!f){continue;}
  17. i=f.search(s);
  18. if(i != -1){
  19. g=f.substr(i-1,1);
  20. if(!hash[g]){hash['and so on'].push(f);}
  21. else{hash[g].push(f);}
  22. }
  23. else {
  24. g=f.substr(f.length-1,1);
  25. if(!hash[g]){hash['and so on'].push(f);}
  26. else{hash[g].push(f);}
  27. }
  28. }

  29. for(i=0;i<aaa.length;i++)
  30. {
  31. g=hash[aaa[i]].length;
  32. for(s=0;s<g;s++){
  33. puts(hash[aaa[i]][s]);
  34. }
  35. }
复制代码
发表于 2023-10-28 09:13:13 | 显示全部楼层
本帖最后由 hfxiang 于 2023-10-28 11:51 编辑

回复 1# 娜美

第3方工具gawk( http://bcn.bathome.net/tool/5.1.0/gawk.exe )实现方法如下:

  1. gawk "NF{a[NR]=substr($1, length($1), 1);b[NR]=$0}END{PROCINFO["sorted_in"]="sort_func";for(j in a)print b[j]}function sort_func(i1,v1,i2,v2,V1,V2){V1=v1==0?6:v1;V2=v2==0?6:v2;return(V1+0>V2+0?1:(V1+0<V2+0?-1:(i1+0<i2+0?-1:1)))}" a.txt>a.txt.tmp
复制代码
 楼主| 发表于 2023-10-28 11:03:45 | 显示全部楼层
多谢各位哥哥   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 09:17 , Processed in 0.019951 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表