标题: [文本处理] 批处理如何根据指定条件对CSV内容进行筛选、删除、输出 [打印本页]
作者: q121212 时间: 2016-8-15 22:51 标题: 批处理如何根据指定条件对CSV内容进行筛选、删除、输出
如图,我有一个CSV文件000.csv,有非常多列,大概有不到50列,这里演示文档就不赘述了。
我要对这个CSV做一步筛选、细分,规则如下:
1. 筛选 “第1列=空” 的所有行,从CSV中移除。
2. 筛选 “第1列==王1“ 的所有行,从CSV中移除。
3. 筛选 “第2列<26” 的所有行,导出到001.csv中。 (要这一整行所有内容,类似复制,原CSV中还有这些行)
4. 筛选“籍贯”并进行如下操作:(注意:K列目前是空值)
G列=北京:K列赋值=1
G列=福建:K列赋值=2
G列=广东:K列赋值=3
G列=湖南:K列赋值=4
……
…
如上,类似先将G列字段做一个排序映射,然后对每一行里的K列进行赋值。
这个需求有些麻烦,甚至我觉得都不应该是批处理做的事情。我不知道这样描述大家能不能理解,也不知道批处理能不能解得出来,各位量力而行,谢谢。
作者: GNU 时间: 2016-8-15 23:01
不用任何脚本,纯Excel操作,2分钟之内应该可以搞定吧。
作者: pcl_test 时间: 2016-8-15 23:49
本帖最后由 pcl_test 于 2016-8-15 23:50 编辑
- @echo off&setlocal enabledelayedexpansion
- findstr /v /r /c:"^[ ]*," /c:"^王1" "000.csv">$
- move $ "000.csv"&rem 覆盖原文件,注意备份
- findstr /r "姓名 ^[^,]*,[1-9], ^[^,]*,1[0-9] ^[^,]*,2[0-5]" "000.csv">"001.csv"
- for /f "delims=" %%a in ('more +9 "%~f0"') do set "%%a"
- for /f "delims=" %%a in ('type "000.csv"') do (
- for /f "tokens=7 delims=," %%b in ("%%a") do echo;%%a,!%%b!
- )
- pause&exit
- 北京=1
- 福建=2
- 广东=3
- 湖南=4
复制代码
作者: pcl_test 时间: 2016-8-16 00:51
本帖最后由 pcl_test 于 2016-8-16 09:04 编辑
第三方http://www.bathome.net/s/tool/index.html?key=gawk- #*&cls&gawk -f "%~f0"|find /v ""&pause&exit
- BEGIN{
- FS=",";csv="000.csv";
- split("北京=1,福建=2,广东=3,湖南=4",a,",");
- for(i=1;i<=length(a);i++){split(a[i],b,"=");c[b[1]]=b[2];}
- while(getline<csv>0){
- if($1&&$1!~/^[[:space:]]+$/&&$1!~/王1/){
- if($1~/姓名/||$2*1<26)print $0>"001.csv";
- print c[$7]?$0","c[$7]:$0;
- }
- }
- }
复制代码
作者: q121212 时间: 2016-8-16 08:52
回复 2# GNU
体量小的话,是不会有这种需求的。就是为了解决繁琐的重复作业,才驱动我们不断考虑 “有没有省事儿点的办法”。
作者: q121212 时间: 2016-8-16 21:28
回复 4# pcl_test
谢谢回复,白天上班没来及验证和回复。不好意思。
我试了第一种解法,第二种涉及第三方,我还不会用
发现:
在处理1、2需求时非常方便,删除指定行。
在处理3需求时,确实也能达到我想要的效果,但是处理方式只能这样写么,感觉不太灵活啊
需求4,我没想到居然可以,老实说我没能看懂....,但是有些要补充的:
1.批处理回显窗口上是可以得到结果的,但是并没有写入到000.csv中
2.我之前描述的可能有问题,需求4要在需求3之前执行
3.这里的北京、福建是举例,实际上的CSV中,这一项并没有重复值,一般都时中文开头,当然也有时候是一串英文(外贸)
不知道能否再帮忙看下,感谢。
作者: GNU 时间: 2016-8-17 13:14
下载一个gawk.exe放在C:\Windows\System32这个文件夹下面
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |