标题: [文本处理] 【已解决】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 编辑
- pushd "D:\数据\"
- 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,可以试试。如果有不同位数的就不行~~。- @echo off&setlocal enabledelayedexpansion
- for %%i in (d:\数据\*.txt) do (
- (for /f "tokens=1-3" %%a in ('sort /+6 /r "%%i"') do (
- if not defined tag (
- echo,%%a %%b
- if !max! gtr %%c set tag=.
- set max=%%c
- ) else (
- if !max! equ %%c echo,%%a %%b
- )
- ))>"d:\数据1\%%~nxi"
- )
复制代码
作者: 思想之翼 时间: 2015-1-9 18:33
回复 3# xxpinqz
感谢各位大师鼎力相助!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |