标题: [文本处理] [已解决]批处理BAT如何判断关键词所在列并删除所在行? [打印本页]
作者: lijiehao 时间: 2014-2-17 23:49 标题: [已解决]批处理BAT如何判断关键词所在列并删除所在行?
如附件,如何实现只判断“工作日期”这一列?目前判断是整一行中是否含有date.txt中的关键词
作者: battab 时间: 2014-2-18 11:14
本帖最后由 battab 于 2014-2-18 11:20 编辑
回复 1# lijiehao
试试这个可以吗?- @echo off&setlocal enabledelayedexpansion
- set n=0
- for /f "tokens=1-3" %%a in (bw.txt) do (
- set/a n+=1
- if "!n!"=="1" echo %%a %%b %%c
- for /f "tokens=*" %%i in (date.txt) do (
- if %%i==%%a echo %%a %%b %%c
- )
- )
- pause>nul
复制代码
这个筛选出有关键词的行
作者: battab 时间: 2014-2-18 11:38
本帖最后由 battab 于 2014-2-18 12:52 编辑
回复 1# lijiehao
这个应该可以满足要求:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1-3" %%a in (bw.txt) do (
- for /f "tokens=*" %%i in (date.txt) do (
- if %%i neq %%a echo %%a %%b %%c >>bw_new.txt
- )
- )
- pause>nul
复制代码
作者: lijiehao 时间: 2014-2-18 12:45
回复 3# battab
非常感谢,目前测试确实可以了
作者: Batcher 时间: 2014-2-18 13:01
回复 3# battab
没有必要在二层for循环里面重复的读取date.txt
一次就够了- @echo off
- set /p str=<date.txt
- (for /f "tokens=1-3" %%a in (bw.txt) do (
- if %str% neq %%a echo %%a %%b %%c
- ))>bw_new.txt
复制代码
作者: Batcher 时间: 2014-2-18 13:03
- gawk "NR==FNR{str=$0}NR>FNR{if($1!=str)print}" date.txt bw.txt > bw_new.txt
复制代码
作者: zhanglei1371 时间: 2014-2-18 13:18
回复 5# Batcher
如果date里不止一行的话,这个还行吗?
作者: DAIC 时间: 2014-2-18 13:40
回复 7# zhanglei1371
set /p 只能获取第一行
作者: lijiehao 时间: 2014-2-18 17:03
本帖最后由 lijiehao 于 2014-2-18 17:05 编辑
回复 5# Batcher
谢谢大神多次的帮助!现在date里面只有一个日期,如果有多个日期存在呢?如
20140218
2014.02.18
20140219
2014.02.19
......
20140225
2014.02.25
此外,为什么只能支持前面3列,如果后面还有几列呢?
惭愧,水平太差,只是为了提高工作效率,不停搜索,不停修改人家的代码
作者: Batcher 时间: 2014-2-18 17:06
回复 9# lijiehao
2楼和3楼的代码都不行是吗?
作者: lijiehao 时间: 2014-2-18 17:38
回复 10# Batcher
只支持前三列,第4列以后的全都没办法输出
作者: Batcher 时间: 2014-2-18 18:04
回复 11# lijiehao
把代码里面的 1-3 改成 1-2*
作者: lijiehao 时间: 2014-2-25 09:01
回复 12# Batcher
非常感谢!
作者: Batcher 时间: 2014-2-25 09:48
回复 13# lijiehao
问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |