[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 思想之翼 于 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
这样批量处理多个文本的代码如何写?恳望得到帮助。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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

评分人数

TOP

按所举例子,如果第三例的数值不大于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

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 3# xxpinqz

感谢各位大师鼎力相助!

TOP

返回列表