Board logo

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

作者: 思想之翼    时间: 2015-1-9 14:17     标题: 【已解决】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
这样批量处理多个文本的代码如何写?恳望得到帮助。
作者: tmplinshi    时间: 2015-1-9 18:00

本帖最后由 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
复制代码
注:第三列的数字必须是从大到小排列的,就像你贴出的数据那样。
作者: xxpinqz    时间: 2015-1-9 18:09

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

作者: 思想之翼    时间: 2015-1-9 18:33

回复 3# xxpinqz

感谢各位大师鼎力相助!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2