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

[文本处理] 批处理如何根据两个文本的前两列内容按指定条件提取相应数据行

如何根据两列条件筛选数据
有文件夹AB 里面个有很多txt,现在各去一个txt文件说明
A文件中,第一列是日期,第二列是时间,后面各列是数据,但随即出现,不是每行都有数据,也不是每行都有一样多的数据
即  将文件A中第2列之后的每一列都是空的“空行”筛选出来,存为文件1,其余的存为文件2.
然后,以文件1中筛选出来的数据(即包含有时间和日期两列数据的文本数据)为标准,找出文件B中前两列与之匹配的行数据存为文件3,其余的存为文件4。

经过大家提醒 已经把excel转化成txt了,请问可以利用批处理完成吗?
1

评分人数

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

请把以下文件作为例子打包压缩传上来:
A文件
B文件
文件1
文件2
文件3
文件4

TOP

回复 3# GNU


   好的

TOP

本帖最后由 happy886rr 于 2016-11-30 10:02 编辑

回复 1# newbat123
推荐用我写的RF工具,下载 http://www.bathome.net/thread-42266-1-1.html
完全pcre高级正则,回车换行都可匹配,兼容各种文本编码。
  1. @echo off
  2. REM 将文件A中第2列之后的每一列都是空的“空行”筛选出来,存为文件1
  3. rf /f /r:"^[0-9:]+[ \t]+[^ |\t]+[ |\t]*[\r\n]$" A>1
  4. REM 其余的存为文件2.
  5. rf /v /r:"^[0-9:]+[ \t]+[^ |\t]+[ |\t]*[\r\n]$" A>2
  6. pause
复制代码

TOP

回复 1# newbat123


    你试试,看看结果,是否能解决问题
在P文中用gawk处理,gawk下载:http://www.bathome.net/s/tool/index.html?down&key=gawk
  1. @echo off&Title 测试
  2. set a=a2014.11.15.txt
  3. set b=b2014.11.15.txt
  4. set #1=1.txt
  5. set #2=2.txt
  6. set #3=3.txt
  7. set #4=4.txt
  8. CALL :_A&CALL :_B
  9. gawk "{if(NR==1){print $0 >\"%#1%\";print $0 >\"%#2%\"}else{if($3==null){print $0 >\"%#1%\"}else{print $0 >\"%#2%\"}}}" "%a%"
  10. gawk "{if(NR==1){print $0 >\"%#3%\";print $0 >\"%#4%\";exit}}" "%b%"
  11. gawk "{if(FNR>1){print $0}}" "%#1%" "%b%"|gawk "{if(!($1$2 in a)){ a[$1$2];print >>\"%#4%\"}else{print >>\"%#3%\"}}"
  12. gawk "/.*/" "%#4%"|gawk "{if($3!=null){print >\"%#4%\"}}"
  13. pause&exit
  14. :_A
  15. (
  16. echo 廓线日期 廓线时间 数据1 数据2 数据3 数据4 数据5 数据6 数据7 数据8 数据9 数据10 数据11 数据12 数据13 数据14 数据15 数据16 数据17 数据18 数据19 数据20 数据21 数据22 数据23
  17. echo 11/02/2014 12:27:55
  18. echo 11/02/2014 22:37:54
  19. echo 11/05/2014 02:07:48 10.4628 10.2529 9.98309
  20. echo 11/05/2014 02:12:48 10.4628 10.2229 9.83319
  21. echo 11/05/2014 02:17:48
  22. echo 11/05/2014 02:22:48 10.3428 10.103 9.62334
  23. )>"%a%"
  24. goto :eof
  25. :_B
  26. (
  27. echo 廓线日期 廓线时间 OH1 OH2 OH3 OH4 OH5 OH6 OH7 OH8 OH9 OH10 OH11 OH12 OH13 OH14 OH15 OH16
  28. echo 11/02/2014 12:27:55 0.359751
  29. echo 11/02/2014 12:37:55 0.359751
  30. echo 11/02/2014 12:42:55 0.359751 1.88869
  31. echo 11/02/2014 12:47:55 0.359751
  32. echo 11/05/2014 02:17:48 0.359751 1.94865
  33. echo 11/02/2014 13:02:55 0.38973
  34. echo 11/06/2014 07:17:44 0.359751
  35. )>"%b%"
  36. goto :eof
复制代码

TOP

回复 5# CommandBatCmd


    数据因为太大,这是我截选的一小部分,所以不能按照这个程序运行

TOP

回复 4# happy886rr


   
解压不出来

TOP

回复 7# newbat123


    A文件与B文件,不是文本文件吗?
这两个文件最大有多少GB?

TOP

回复 8# CommandBatCmd


    是excel文件,因为文件太多,希望能够有批处理

TOP

回复 9# newbat123


    你的意思是用批处理直接操作excel文件?还是怎样的?

TOP

回复 10# CommandBatCmd


    恩恩,是的是的 ,如果不可以的话,我可以把excel转成txt?

TOP

回复 11# newbat123


    excel文件是二进制文件,需要保持为文本文件才能被其他程序处理啊

TOP

回复 12# CommandBatCmd


    那我自己先处理成txt吧

TOP

回复 13# newbat123
你直接用excel的宏命令编程就能解决,批处理不肯能直接处理excel,excel自带宏命令编程。

TOP

1. 难道是 csv
2. 各位答主真是大好人。

TOP

返回列表