标题: [文本处理] 批处理如何删除文本中以指定字符分割成两列的第二列内容为纯数字/纯字母的行 [打印本页]
作者: Rasm 时间: 2017-1-4 16:16 标题: 批处理如何删除文本中以指定字符分割成两列的第二列内容为纯数字/纯字母的行
本帖最后由 pcl_test 于 2017-1-14 02:21 编辑
批处理如何批量删除纯数字所在的行数?- jhfgudeli|wodima123
- jhfgudeli|jhfgudeli
- jhfgudeli|7204381
- jest1314527|1314527
- jeffnomms|fanzhe128
- jaychen3326|wfd901215
- jaychen3326|123456
- jasonlouhao|jasonlouhao
- jasonlouhao|asd138
- jasonlee123|jasonlee123
- jasonlee123|19880918
- jasonlee123|123123
- jaskjay|63619063qw
复制代码
目前数据是这样,想把“|”右侧数据是纯数字的内容都删除,留下字母+数字的内容,“|”前面的内容不管
结果是:- jhfgudeli|wodima123
- jhfgudeli|jhfgudeli
- jeffnomms|fanzhe128
- jaychen3326|wfd901215
- jasonlouhao|jasonlouhao
- jasonlouhao|asd138
- jasonlee123|jasonlee123
- jasonlee123|19880918
- jaskjay|63619063qw
复制代码
================================经过一楼的回复,已经实现了想要的效果。确实非常棒
请教,如何删除纯数字和纯字母呢,因为我只想要字母+数字的内容
作者: flyinnet9 时间: 2017-1-4 17:44
- @echo off
- for /f "tokens=1-2 delims=|" %%a in (test.txt) do (
- for /f "delims=0123456789" %%c in ("#%%b") do if not "%%c"=="#" echo.%%a^|%%b
- )
- pause
复制代码
作者: /zhqsystem/zhq 时间: 2017-1-4 20:42
回复 1# Rasm
样本和说明真烂
- for /f "tokens=1,* delims=|" %%i in ('type "1.txt"') do (
- set "#=%%j"
- for /l %%n in (0,1,9)do set "#=%%n!#!"
- for /l %%n in (0,1,9)do set "#=!#:%%~n=!"
- if defined # echo,%%j
- )
复制代码
作者: GNU 时间: 2017-1-4 23:26
回复 3# /zhqsystem/zhq
你的代码根本没测试就发出来了吧
作者: Rasm 时间: 2017-1-5 00:59
回复 4# WHY
没有效果
作者: /zhqsystem/zhq 时间: 2017-1-5 01:33
回复 5# GNU
醉了,我测试了只是少写了个空格检测和变量延迟只写主要的东西更直观,不过不测试也能正常通过,经常忘标点少打个字符比较常见
作者: GNU 时间: 2017-1-5 10:27
回复 7# /zhqsystem/zhq
真能搞笑,自己试试吧,代码肯定不对。
作者: Rasm 时间: 2017-1-5 10:56
回复 2# flyinnet9
已经成功导出到新文本,
请教,如何删除纯数字和纯字母呢,因为我只想要字母+数字的内容
作者: flyinnet9 时间: 2017-1-5 11:40
回复 9# Rasm - @echo off
- (for /f "tokens=1-2 delims=|" %%a in (a.txt) do (
- for /f "delims=0123456789" %%c in ("#%%b") do if not "%%c"=="#" if not "%%c"=="#%%b" echo.%%a^|%%b
- ))>result.txt
- pause
复制代码
作者: shmily 时间: 2017-1-7 23:41
回复 9# Rasm
导出来少了一行。
第13行应该是要的吧?
作者: CrLf 时间: 2017-1-7 23:50
- findstr /v "[^|0-9 ][0-9]* *$" a.txt
复制代码
作者: Nsqs 时间: 2017-1-8 01:07
- :On Error Resume Next
- :set fso=CreateObject("scripting.filesystemobject")
- :Sub class_bat
- echo off&cls
- cscript -nologo -e:vbs "%0"
- pause
- Exit Sub
- :End Sub
- set RegExp=new RegExp
- RegExp.IgnoreCase=-1:RegExp.Global=-1:regexp.multiline=-1
- file="a.txt"
- RegExp.Pattern=".*\|([^a-z]*|[^0-9]*)$"
- var=fso.opentextfile(file).readall
- var=RegExp.Replace (var,"")
- RegExp.Pattern="^.*[^\n]$"
- set matches=regexp.execute(var)
- for each match in matches
- result=result&match&vbcrlf
- next
- result=left(result,len(result)-2)
- fso.createtextfile("new.txt").write result
- wsh.echo result
复制代码
作者: Rasm 时间: 2017-1-13 00:45
回复 10# flyinnet9
转换下,一样的,文本,如果是 | 右边只保留纯数字呢,该怎么修改代码
作者: flyinnet9 时间: 2017-1-13 10:33
本帖最后由 flyinnet9 于 2017-1-13 10:34 编辑
有字符的另算- 纯数字
- findstr "|[0-9]*$" a.txt
-
- 纯字母
- findstr "|[^0-9]*$" a.txt
-
- 非纯数字
- findstr /v "|[0-9]*$" a.txt
-
- 非纯字母
- findstr /v "|[^0-9]*$" a.txt
-
- 数字和字母
- findstr /v "|[0-9]*.$" a.txt |findstr /v "|[^0-9]*.$"
复制代码
作者: win.BAT 时间: 2017-1-13 14:41
回复 1# Rasm
老旧DZ 齿问题了
删除|右边数字列
cat a
jhfgudeli|wodima123
jhfgudeli|jhfgudeli
jhfgudeli|7204381
jest1314527|1314527
jeffnomms|fanzhe128
jaychen3326|wfd901215
jaychen3326|123456
jasonlouhao|jasonlouhao
jasonlouhao|asd138
jasonlee123|jasonlee123
jasonlee123|19880918
jasonlee123|123123
jaskjay|63619063qw
awk -F "|" '$2!~ /^[0-9]+$/' a
应得结果
jhfgudeli|wodima123
jhfgudeli|jhfgudeli
jeffnomms|fanzhe128
jaychen3326|wfd901215
jasonlouhao|jasonlouhao
jasonlouhao|asd138
jasonlee123|jasonlee123
jaskjay|63619063qw
作者: Rasm 时间: 2017-1-14 00:14
回复 15# flyinnet9
按照你第一次写代码,该如何修改呢
作者: Rasm 时间: 2017-1-21 15:11 标题: 批处理如何批量删除纯数字所在的行数?
jhfgudeli|wodima123
jhfgudeli|jhfgudeli
jhfgudeli|7204381
jest1314527|1314527
jeffnomms|fanzhe128
jaychen3326|wfd901215
“|”右侧只要是纯数字的,整行删除,“123123fa” 这种不要删除掉哦
作者: 老刘1号 时间: 2017-1-21 20:26
本帖最后由 老刘1号 于 2017-1-22 16:55 编辑
- Echo off&cls
- >输出.txt (
- FOR /f "delims=^| tokens=1,*" %%a in (文本.txt) do (
- echo.%%b|(Findstr /i "a b c d e f g h i j k l m n o p q r s t u v w x y z")1>nul 2>&1&&Echo.%%a^|%%b
- ))
复制代码
出了点小问题,改下……
这回真改了……
作者: Nsqs 时间: 2017-1-22 02:43
本帖最后由 Nsqs 于 2017-1-22 04:45 编辑
方法1- ' 2>nul &cls&(type "1.txt"|cscript -nologo -e:"vbs" "%~0")>new.txt&exit
- set ws=wsh.stdin:set regexp=new regexp
- with regexp
- do
- .global=-1:.pattern="^.+\|\d*$"
- read=ws.readline
- if not .test(read) then wsh.echo read
- loop until ws.atendofstream
- end with
复制代码
方法2- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=1-2 delims=|" %%1 in (1.txt)do (
- set /a n=%%2
- if !n! equ 0 echo %%1^|%%2
- ))>new.txt 2>nul
复制代码
作者: CrLf 时间: 2017-1-22 11:05
- findstr /v "\|[0-9][0-9]*$" 1.txt >new.txt
复制代码
作者: Nsqs 时间: 2017-1-22 15:15
回复 4# CrLf
这个正则写法有问题,有的数字没有剔除
作者: 老刘1号 时间: 2017-1-22 16:55
回复 2# 老刘1号
……题目看错,我处理了一通左侧的……
作者: 老刘1号 时间: 2017-1-22 16:59
回复 4# CrLf
[attach]10397[/attach]
作者: zz100001 时间: 2017-1-22 17:28
哎哟,版主一出手就有美女加分,隔壁老刘就没这待遇啊
作者: pcl_test 时间: 2017-1-22 18:05
回复 7# 老刘1号
最后结尾处的没有排除是因为没有换行或是有空白字符,所以findstr没有匹配到- powershell "gc '文本.txt'|?{$_ -notmatch '\|\d+\s*$'}"&pause
复制代码
作者: capslock 时间: 2017-1-23 12:00
回复 26# zz100001
你怎么知道我是女的, 加分是随机的haha, 给老刘1号也补上了
作者: Rasm 时间: 2017-1-23 20:49
回复 20# 老刘1号
如果一个文本中,只想删选出右侧:123dfsajo,数字开头,但是里面有字母+数字的,该怎么修改
作者: 老刘1号 时间: 2017-1-23 21:05
我说嘛我原来是1楼被挤到20楼了……
作者: Rasm 时间: 2017-1-23 21:14
回复 31# 老刘1号
对啊,合并了,哈哈,问题雷同
作者: Rasm 时间: 2017-1-23 21:29
回复 20# 老刘1号
这个代码是对了,140Kb的文本,处理了2分钟
作者: 老刘1号 时间: 2017-1-23 22:17
回复 33# Rasm
不知道有红包奖励没(我只想吃个雪糕)
作者: Rasm 时间: 2017-1-26 17:44
回复 34# 老刘1号
送你个敬业福
作者: 老刘1号 时间: 2017-1-26 20:38
回复 35# Rasm
已经集齐了
作者: Rasm 时间: 2017-1-31 21:59
回复 2# flyinnet9
123adfa
这种也是字母+数字的被过滤了,该怎么加进去
作者: CommandBatCmd 时间: 2017-2-1 00:29
回复 34# Rasm
使用gawk,简单高效,删除纯数字和纯字母,只保留字母+数字的行。- @echo off
- gawk -F"|" "BEGIN{IGNORECASE=1}$2~/[0-9][A-Z]|[a-z][0-9]/" 文本.txt>输出.txt
- pause
复制代码
使用纯P,代码稍微多点,删除纯数字和纯字母,只保留字母+数字的行。- @echo off
- (for /f "tokens=1,2* delims=|" %%a in (文本.txt) do (
- for /f "tokens=1,2* delims=0123456789" %%c in ("#%%b") do (
- if not "%%c%%d"=="#" (
- for /f "tokens=1,2* delims=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" %%A in ("#%%b") do (
- if not "%%A%%B"=="#" echo,%%a^|%%b
- )
- )
- )
- ))>输出.txt
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |