标题: [文本处理] 批处理如何判断并提取文本文件里每行第一个字符包含多个关键词的整行? [打印本页]
作者: wh123wh123 时间: 2023-2-23 23:28 标题: 批处理如何判断并提取文本文件里每行第一个字符包含多个关键词的整行?
本帖最后由 wh123wh123 于 2023-2-24 00:01 编辑
批处理如何判断并提取A文本文件里每行第一个字符是“7”或“8”或“4”多个关键词的整行并输出到另外一个B文本文件里?例如A文本文件内容:
9011509 对方方法 69.28 26181982 1.298 -4.641 -2.354 205 25.851 61.33 113.58 85.195 -36.788
771152 观后感 50.57 56320912 1.64 -3.689 0.938 117 35.215 46.9 82 -74.84 -36.076
50788 韩国1 12.99 25577026 0.92 -2.747 1.962 498 51.223 11.1 21.07 -89.82 -35.693
488253 队附近 24.94 28048504 2.306 -6.206 2.634 139 54.149 20.71 40.44 95.268 -35.221
83687 陶然亭 5.1 362950 1.559 -4.348 -1.544 143 9.337 4.86 9.2 -89.3 -35.032 0.329
693233 而额 14.96 7770203 1.471 -2.508 0.403 105 35.223 13.28 24.92 -87.651 -34.957
89445 一条鱼 8.83 299553 1.345 -2.831 -2.539 155 7.299 8.37 15.87 -89.606 -34.252 0.184
只提取后的例子:只提取第一字符包含关键词“7、8、4”的整行,B文本文件结果例子:
771152 观后感 50.57 56320912 1.64 -3.689 0.938 117 35.215 46.9 82 -74.84 -36.076
488253 队附近 24.94 28048504 2.306 -6.206 2.634 139 54.149 20.71 40.44 95.268 -35.221
83687 陶然亭 5.1 362950 1.559 -4.348 -1.544 143 9.337 4.86 9.2 -89.3 -35.032 0.329
89445 一条鱼 8.83 299553 1.345 -2.831 -2.539 155 7.299 8.37 15.87 -89.606 -34.252 0.184
求完整批处理代码
作者: 77七 时间: 2023-2-24 00:00
本帖最后由 77七 于 2023-2-24 00:26 编辑
- @echo off
- for /f "delims=" %%a in ('type "A.txt"') do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo !str:~0,1! | findstr /r "7 8 4" 1>nul 2>nul && (
- >>B.txt echo !str!
- )
- endlocal
- )
- pause
复制代码
作者: wh123wh123 时间: 2023-2-24 00:06
本帖最后由 wh123wh123 于 2023-2-24 00:12 编辑
回复 2# 77七
感谢老师帮助,测试后发现不够精确,只需要判断每行的第一个字符或数字是“7或8或4”,不是判断第一组或第一列内容包含关键词,是第一个字符或数字是不是7或8或4
作者: 77七 时间: 2023-2-24 00:10
本帖最后由 77七 于 2023-2-24 00:19 编辑
回复 3# wh123wh123
我理解错了,已修改水平有限,修改了几次...
作者: wh123wh123 时间: 2023-2-24 00:24
回复 4# 77七
感谢老师帮助,如果按开头字符关键词是否“7、8、48”的整行,B文本文件结果例子: 这样的话如何修改完善一下代码?
771152 观后感 50.57 56320912 1.64 -3.689 0.938 117 35.215 46.9 82 -74.84 -36.076
488253 队附近 24.94 28048504 2.306 -6.206 2.634 139 54.149 20.71 40.44 95.268 -35.221
83687 陶然亭 5.1 362950 1.559 -4.348 -1.544 143 9.337 4.86 9.2 -89.3 -35.032 0.329
89445 一条鱼 8.83 299553 1.345 -2.831 -2.539 155 7.299 8.37 15.87 -89.606 -34.252 0.184
作者: 77七 时间: 2023-2-24 00:33
回复 5# wh123wh123
- @echo off
- for /f "delims=" %%a in ('type "A.txt"') do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo !str:~0,1! | findstr /r "7 8" 1>nul 2>nul && (
- >>B.txt echo !str!
- )
- if "!str:~0,2!" equ "48" (
- >>B.txt echo !str!
- )
- endlocal
- )
- pause
复制代码
作者: 77七 时间: 2023-2-24 00:41
本帖最后由 77七 于 2023-2-24 00:43 编辑
- @echo off
- for /f "delims=" %%a in ('type "A.txt"') do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo !str! | findstr "^7 ^8 ^48" 1>nul 2>nul && (
- >>B.txt echo !str!
- )
- endlocal
- )
- pause
复制代码
这样应该也行,正则表达式我不太会用- @echo off
- for /f "delims=" %%a in ('type "A.txt" ^| findstr "^7 ^8 ^48"') do (
- >>B.txt echo %%a
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2023-2-24 08:16
回复 7# 77七
用for好像多此一举,直接:- findstr /b "7 8 48" A.txt>B.txt
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |