标题: [文本处理] 批处理怎样从某一行开始提取数据? [打印本页]
作者: yujw668 时间: 2024-5-6 10:21 标题: 批处理怎样从某一行开始提取数据?
学校
班级简介
***班级成绩名次
文字描述
序号 姓名 成绩 名次
1 张三 80 10
2 李四 85 8
3 赵六 90 7
4 王刚 91 6
各位老师好,想请问下,就是从序号这一行往下所有的数据都提取到新的文本文件中,批处理该怎么写呢,除了skip跳过某行之外,还有什么方法,该怎么写呢?
作者: qixiaobin0715 时间: 2024-5-6 10:38
上传一个文件到网盘,让大家伙看看文本结构具体是什么样的,这样才好帮你。
作者: aloha20200628 时间: 2024-5-6 10:45
本帖最后由 aloha20200628 于 2024-5-6 10:58 编辑
回复 1# yujw668
源文件 "班级名次.txt" 删除前6行的结果被存为 "班级名次.new.txt"- @echo off &more +6 "班级名次.txt">"班级名次.new.txt" &pause&exit/b
复制代码
作者: yujw668 时间: 2024-5-6 11:02
回复 3# aloha20200628
老师好,这样的话每次都需要数是不是,如果换个文本,序号前面的内容可能不一样了,就不是6行了,如果自动识别不需要每次更换文本数多少行该如何写呢
作者: qixiaobin0715 时间: 2024-5-6 11:03
- @echo off
- (for /f "delims=" %%i in (1.txt) do (
- for /f %%j in ("%%i") do (
- if "%%j"=="序号" set n=true
- )
- if defined n echo,%%i
- ))>new_1.txt
- pause
复制代码
作者: aloha20200628 时间: 2024-5-6 11:14
本帖最后由 aloha20200628 于 2024-5-6 11:16 编辑
回复 4# yujw668
- @echo off &findstr /rbc:"[0-9]* " "班级名次.txt">"班级名次.new.txt" &pause&exit/b
复制代码
作者: yujw668 时间: 2024-5-6 11:37
回复 5# qixiaobin0715
非常感谢老师的帮助,刚才测试了一下,完全没问题,以后还是要多学习
作者: yujw668 时间: 2024-5-6 11:38
qixiaobin0715 发表于 2024-5-6 11:03
非常感谢老师的帮助,刚才测试了一下,完全没问题,以后还是要多学习
作者: Batcher 时间: 2024-5-6 12:20
回复 1# yujw668 - @echo off
- cd /d "%~dp0"
- set "MyFile=1.txt"
- for /f "delims=:" %%i in ('findstr /n /i /b "序号" "%MyFile%"') do (
- more +%%i "%MyFile%"
- )
- pause
复制代码
作者: yujw668 时间: 2024-5-6 12:23
qixiaobin0715 发表于 2024-5-6 11:03
序号 姓名 成绩 名次
1 张三 80 10
2 李四 85 8
3 赵六 90 7
4 王刚 9 16
老师好,刚才仔细看了一下导出的数据,上面有序号 姓名 成绩名次 这一列,如果不需要这一列,这个是怎么弄,就是说从序号往下所有的数据都截取呢。
作者: yujw668 时间: 2024-5-6 12:24
回复 yujw668
Batcher 发表于 2024-5-6 12:20
谢谢群主老师的帮助,非常完美解。赞赞赞👍👍👍
作者: yujw668 时间: 2024-5-6 12:29
回复 yujw668
aloha20200628 发表于 2024-5-6 11:14
感谢老师, 非常简洁明了,赞赞赞👍👍👍
作者: Batcher 时间: 2024-5-6 13:09
回复 12# yujw668
使用6楼代码请注意:需要跳过的行,开头不能有数字
作者: qixiaobin0715 时间: 2024-5-6 13:43
5楼代码第6行放到第3行下面试试。
作者: ll36912 时间: 2024-5-6 14:14
- @echo off
- for /f "delims=:" %%i in ('findstr /n "序号" 1.txt ') do (
- more +%%i 1.txt >2.txt
- )
- pause
复制代码
作者: yujw668 时间: 2024-5-6 14:15
回复 14# qixiaobin0715 - @echo off
- (for /f "delims= usebackq tokens=1-2" %%i in (999.txt) do (
- for /f %%j in ("%%i") do (
- if defined n echo,%%i %%j %%k
- if "%%j"=="IP" set n=true
- )
- :dizzy:
- ))>new_1.txt
- pause
复制代码
老师,比如说,我想提取两列,怎么提不出来呢,
作者: Batcher 时间: 2024-5-6 14:23
回复 16# yujw668 - @echo off
- cd /d "%~dp0"
- set "FileOld=999.txt"
- set "FileNew=222.txt"
-
- for /f "delims=:" %%i in ('findstr /n /i /b "IP" "%FileOld%"') do (
- call :GetCol %%i
- exit /b
- )
-
- :GetCol
- (for /f "skip=%1 tokens=1,2" %%a in ('type "%FileOld%"') do (
- echo %%a %%b
- ))>"%FileNew%"
复制代码
作者: yujw668 时间: 2024-5-6 14:23
提取前
******************************************************************************
* Copyright (c) 2004-2017 New H3C Technologies Co., Ltd. All rights reserved.*
* Without the owner's prior written consent, *
* no decompiling or reverse-engineering shall be allowed. *
******************************************************************************
login: admin
Password:
<H3C>display arp
Type: S-Static D-Dynamic O-Openflow R-Rule M-Multiport I-Invalid
IP address MAC address SVLAN/VSI Interface/Link ID Aging Type
10.80.31.1 00e0-6724-f7ff 31 GE1/0/1 17 D
10.80.31.73 1c7d-2242-650d 31 GE1/0/1 19 D
10.80.31.77 60fb-008a-53e0 31 GE1/0/1 18 D
10.80.31.81 d268-51d2-3ea5 31 GE1/0/1 20 D
10.80.31.84 9258-4c72-39a4 31 GE1/0/1 5 D
10.80.31.85 66b1-48a1-1a26 31 GE1/0/1 3 D
10.80.31.86 d4f0-ea5e-73c9 31 GE1/0/1 3 D
10.80.31.97 2c0d-a754-3166 31 GE1/0/1 20 D
10.80.31.231 000c-2906-bd93 31 GE1/0/1 5 D
提取后
10.80.31.1 00e0-6724-f7ff 31 GE1/0/1 17 D 10.80.31.1 %k
10.80.31.73 1c7d-2242-650d 31 GE1/0/1 19 D 10.80.31.73 %k
10.80.31.77 60fb-008a-53e0 31 GE1/0/1 18 D 10.80.31.77 %k
10.80.31.81 d268-51d2-3ea5 31 GE1/0/1 20 D 10.80.31.81 %k
10.80.31.84 9258-4c72-39a4 31 GE1/0/1 5 D 10.80.31.84 %k
10.80.31.85 66b1-48a1-1a26 31 GE1/0/1 3 D 10.80.31.85 %k
10.80.31.86 d4f0-ea5e-73c9 31 GE1/0/1 3 D 10.80.31.86 %k
10.80.31.97 2c0d-a754-3166 31 GE1/0/1 20 D 10.80.31.97 %k
10.80.31.231 000c-2906-bd93 31 GE1/0/1 5 D 10.80.31.231 %k
只想提取
IP 和 maC这两列
作者: qixiaobin0715 时间: 2024-5-6 14:26
列与列之间是制表符分隔吗?
作者: yujw668 时间: 2024-5-6 14:28
列与列之间是制表符分隔吗?
qixiaobin0715 发表于 2024-5-6 14:26
不是,我看着好像就是空格
作者: qixiaobin0715 时间: 2024-5-6 14:35
本帖最后由 qixiaobin0715 于 2024-5-9 14:49 编辑
你传一个文件到网盘看看,不能“好像”,否则会得到错误的结果。
或者将复制的内容放到代码栏中。
作者: yujw668 时间: 2024-5-6 15:12
或者将复制的内容放到代码栏中。
qixiaobin0715 发表于 2024-5-6 14:35
链接:https://pan.baidu.com/s/1C1-_xKCpMUtlmr--Q2XMRw
提取码:zzrw
--来自百度网盘超级会员V7的分享
作者: qixiaobin0715 时间: 2024-5-6 15:26
- @echo off
- for /f "tokens=1-6*" %%a in (20240430-183539.log) do (
- if defined n echo,%%a %%b %%c
- if /i "%%a"=="ip" set n=true
- )
- pause
复制代码
作者: yujw668 时间: 2024-5-8 15:02
qixiaobin0715 发表于 2024-5-6 15:26
好的,谢谢老师,已经测试了,都正常
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |