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

[文本处理] 【已解决】BAT:如何根据条件删除txt文本内数据的特定行与列

[复制链接]
发表于 2015-1-9 14:17:06 | 显示全部楼层 |阅读模式
本帖最后由 思想之翼 于 2015-1-9 18:33 编辑

D:/数据/内有若干txt文本,每个文本内的数据格式如下:
01 08        6
07 08        6
01 07        5
02 07        5
03 08        5
01 02        4
01 03        3
06 10        2
01 05        1
01 12        0
现在欲根据如下条件,删除各个文本内数据的特定行与列:
1、先看第三列数据,保留最大数、次大数的行,即
01 08        6
07 08        6
01 07        5
02 07        5
03 08        5
2、再删除第三列数据,即最终结果是:
01 08
07 08
01 07
02 07
03 08
这样批量处理多个文本的代码如何写?恳望得到帮助。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-1-9 18:00:01 | 显示全部楼层
本帖最后由 tmplinshi 于 2015-1-9 18:05 编辑
  1. pushd "D:\数据"
  2. gawk "BEGINFILE {n=s=f3=""} { if (f3 != $3) {f3 = $3; n++}; if (n<=2) s=s $1 " " $2 "\n" } ENDFILE {printf s>FILENAME}" *.txt
复制代码
注:第三列的数字必须是从大到小排列的,就像你贴出的数据那样。

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2015-1-9 18:09:36 | 显示全部楼层
按所举例子,如果第三例的数值不大于9,可以试试。如果有不同位数的就不行~~。

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (d:\数据\*.txt) do (
  3.   (for /f "tokens=1-3" %%a in ('sort /+6 /r "%%i"') do (
  4.     if not defined tag (
  5.              echo,%%a %%b
  6.         if !max! gtr %%c set tag=.
  7.         set max=%%c
  8.     ) else (
  9.         if !max! equ %%c echo,%%a %%b
  10.     )
  11.   ))>"d:\数据1\%%~nxi"
  12. )
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

 楼主| 发表于 2015-1-9 18:33:13 | 显示全部楼层
回复 3# xxpinqz

感谢各位大师鼎力相助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 21:34 , Processed in 0.019553 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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