标题: [文本处理] 求助批处理CSV文本去重复,仅保留数字开头的行前三列 [打印本页]
作者: haichuan5121 时间: 2024-8-16 11:15 标题: 求助批处理CSV文本去重复,仅保留数字开头的行前三列
CSV格式的怎么搞定;也是需要去重,需要第17行开始前三列一致的行去重,例如源文件后面1-13前三列和前面1-13前三列是重复的就不提取,
即仅保留以数字1-24数字开头的行,数字行不一定是24但在50个以内;
源内容是
bbb
Slot No 1
Date 0.00E+00
Lot ID 0.00E+00
Operator ID AGV
Cassette ID 0.00E+00
Retry 0
Recipe ID 23s
Std Min Value 0.00E+00
Std Max Value 1.00E+09
Ctl Min Value 0.00E+00
Ctl Max Value 1.00E+09
Function SHEET
Curr.Range AUTO
Volt Range AUTO
No X-Point Y-Point Data Result
1 80.2 16.8 asd OK
2 270.8 16.8 asd OK
3 448.3 16.8 asd OK
4 678.5 16.8 asd OK
5 875.4 16.8 asd OK
6 1038.1 16.8 hdfg OK
7 1038.1 436.7 asd OK
8 875.4 436.7 asd OK
9 678.5 436.7 sc OK
10 448.3 436.7 asd OK
11 270.8 436.7 asd OK
12 80.2 436.7 asd OK
13 80.2 862.9 sfs OK
14 270.8 862.9 asd OK
15 448.3 862.9 asd OK
16 678.5 862.9 asd OK
17 875.4 862.9 asd OK
18 1038.1 862.9 asd OK
19 1038.1 1283.3 asd OK
20 875.4 1283.3 asd OK
21 678.5 1283.3 asd OK
22 448.3 1283.3 asd OK
23 270.8 1283.3 0.00E+00 OK
24 80.2 1283.3 0.00E+00 OK
MAX 3.59E+02
Slot No 2
Date 0.00E+00
Lot ID 0.00E+00
Operator ID AGV
Cassette ID 0.00E+00
Retry 0
Recipe ID 23s
Std Min Value 0.00E+00
Std Max Value 1.00E+09
Ctl Min Value 0.00E+00
Ctl Max Value 1.00E+09
Function SHEET
Curr.Range AUTO
Volt Range AUTO
No X-Point Y-Point Data Result
1 80.2 16.8 asdw OK
2 270.8 16.8 asDd OK
3 448.3 16.8 aDsd OK
4 678.5 16.8 asd OK
5 875.4 16.8 asFd OK
6 1038.1 16.8 hdfg OK
7 1038.1 436.7 asd OK
8 875.4 436.7 aFsd OK
9 678.5 436.7 sc OK
10 448.3 436.7 asFd OK
11 270.8 436.7 asd OK
12 80.2 436.7 asSd OK
13 80.2 862.9 sSfs OK
结果保留
No X-Point Y-Point
1 80.2 16.8
2 270.8 16.8
3 448.3 16.8
4 678.5 16.8
5 875.4 16.8
6 1038.1 16.8
7 1038.1 436.7
8 875.4 436.7
9 678.5 436.7
10 448.3 436.7
11 270.8 436.7
12 80.2 436.7
13 80.2 862.9
14 270.8 862.9
15 448.3 862.9
16 678.5 862.9
17 875.4 862.9
18 1038.1 862.9
19 1038.1 1283.3
20 875.4 1283.3
21 678.5 1283.3
22 448.3 1283.3
23 270.8 1283.3
24 80.2 1283.3
作者: qixiaobin0715 时间: 2024-8-16 11:40
列与列之间是以逗号分隔的吧?
作者: 77七 时间: 2024-8-16 14:27
把楼主的文本复制到1.txt,以下代码生成测试文件,方便各位测试- @echo off
- cd /d "%~dp0"
- (for /f "delims=" %%a in ('more "1.txt"') do (
- set str=%%a
- setlocal enabledelayedexpansion
- set "str=!str: =,!"
- echo=!str!
- endlocal
- ))>1.csv
- pause
复制代码
作者: 77七 时间: 2024-8-16 14:31
- @echo 0ff
- cd /d "%~dp0"
- (
- echo No,X-Point,Y-Point
- for /f "tokens=1-3 delims=," %%a in ('findstr /rbc:"[0-9][0-9]*,[0-9.][0-9.]*,[0-9.][0-9.]*" "1.csv"') do (
- if not defined _"%%a %%b %%c" (
- echo %%a,%%b,%%c
- set _"%%a %%b %%c"=1
- )
- )
- ) > "2.csv"
- pause
复制代码
作者: haichuan5121 时间: 2024-8-16 15:20
回复 4# 77七
第一个转CSV格式完全一致 ,但第二个验证结果
内容带执行过程了呢
No X-Point Y-Point
C:\Users\1111\Desktop\PI\验证>(if not defined _"1 80.2 16.8" (
echo 1 80.2 16.8
set _"1 80.2 16.8"=1
) )
1 80.2 16.8
C:\Users\1111\Desktop\PI\验证>(if not defined _"2 270.8 16.8" (
echo 2 270.8 16.8
set _"2 270.8 16.8"=1
) )
2 270.8 16.8
C:\Users\1111\Desktop\PI\验证>(if not defined _"3 448.3 16.8" (
echo 3 448.3 16.8
set _"3 448.3 16.8"=1
) )
3 448.3 16.8
C:\Users\1111\Desktop\PI\验证>(if not defined _"3 448.3 16.8" (
echo 4 678.5 16.8
set _"4 678.5 16.8"=1
) )
4 678.5 16.8
作者: haichuan5121 时间: 2024-8-16 15:21
回复 2# qixiaobin0715
对的
作者: 77七 时间: 2024-8-16 15:25
本帖最后由 77七 于 2024-8-16 15:27 编辑
回复 5# haichuan5121
我打错了,echo off,打成0ff了,测试时两个脚本写一起了,没发现。
作者: aloha20200628 时间: 2024-8-16 15:29
回复 1# haichuan5121
以下代码用一楼示例文件作为 “源文件.csv”
- @echo off &setlocal enabledelayedexpansion
- (echo,No X-Point Y-Point
- for /f "tokens=1-3 delims= " %%a in ('findstr /rbc:"[0-9][0-9]* " "源文件.csv" ') do (
- if %%a gtr !lastK! (echo,%%a %%b %%c&set "lastK=%%a")
- ))>"输出结果.csv" &endlocal&pause&exit/b
复制代码
作者: qixiaobin0715 时间: 2024-8-16 15:57
本帖最后由 qixiaobin0715 于 2024-8-16 16:03 编辑
如果仅仅以顶楼提供的示范文件,这样也行吧:- @echo off
- set n=1
- setlocal enabledelayedexpansion
- (for /f "tokens=1-3 delims=," %%i in (1.csv) do (
- if !n! equ %%i (
- echo,%%i,%%j,%%k
- set /a n+=1
- )
- ))>2.csv
- pause
复制代码
作者: haichuan5121 时间: 2024-8-16 16:50
回复 7# 77七
测试结果 1-13编号后面重复的还会再出现一遍
No X-Point Y-Point
1 - 副本.csv:1 80.2 16.8
1 - 副本.csv:2 270.8 16.8
1 - 副本.csv:3 448.3 16.8
1 - 副本.csv:4 678.5 16.8
1 - 副本.csv:5 875.4 16.8
1 - 副本.csv:6 1038.1 16.8
1 - 副本.csv:7 1038.1 436.7
1 - 副本.csv:8 875.4 436.7
1 - 副本.csv:9 678.5 436.7
1 - 副本.csv:10 448.3 436.7
1 - 副本.csv:11 270.8 436.7
1 - 副本.csv:12 80.2 436.7
1 - 副本.csv:13 80.2 862.9
1 - 副本.csv:14 270.8 862.9
1 - 副本.csv:15 448.3 862.9
1 - 副本.csv:16 678.5 862.9
1 - 副本.csv:17 875.4 862.9
1 - 副本.csv:18 1038.1 862.9
1 - 副本.csv:19 1038.1 1283.3
1 - 副本.csv:20 875.4 1283.3
1 - 副本.csv:21 678.5 1283.3
1 - 副本.csv:22 448.3 1283.3
1 - 副本.csv:23 270.8 1283.3
1 - 副本.csv:24 80.2 1283.3
1 - 副本.csv:1 80.2 16.8
1 - 副本.csv:2 270.8 16.8
1 - 副本.csv:3 448.3 16.8
1 - 副本.csv:4 678.5 16.8
1 - 副本.csv:5 875.4 16.8
1 - 副本.csv:6 1038.1 16.8
1 - 副本.csv:7 1038.1 436.7
1 - 副本.csv:8 875.4 436.7
1 - 副本.csv:9 678.5 436.7
1 - 副本.csv:10 448.3 436.7
1 - 副本.csv:11 270.8 436.7
1 - 副本.csv:12 80.2 436.7
1 - 副本.csv:13 80.2 862.9
1.csv:1 80.2 16.8
作者: haichuan5121 时间: 2024-8-16 16:58
回复 9# qixiaobin0715
一个文件执行是OK的结果 批次多个就不行了 *.csv
作者: qixiaobin0715 时间: 2024-8-16 17:04
发现求助帖提供的样本不典型,总是与实际相差甚远,怪不得代码要一遍遍重写。
作者: qixiaobin0715 时间: 2024-8-16 17:07
本帖最后由 qixiaobin0715 于 2024-8-19 09:14 编辑
回复 11# haichuan5121
你多个文件是如何执行的,把你修改后的代码发上来看看。
或者把你执行的批处理和测试文件都发到网盘上,写清楚要得到的结果。让大家看看到底问题出在哪里。
作者: ppll2030 时间: 2024-8-16 17:23
回复 1# haichuan5121
把csv源文件改名为a.csv,运行脚本后,结果为b.csv- @echo off &setlocal enabledelayedexpansion
- (echo,No,X-Point,Y-Point
- for /f "tokens=1-3* delims=," %%a in ('findstr /rbc:"[0-9][0-9]*" "a.csv" ') do (
- set v=%%a,%%b,%%c
- if not defined !v! set !v!=s & echo !v!
- ))>b.csv
- start "" b.csv
- exit/b
复制代码
作者: 77七 时间: 2024-8-16 17:36
回复 10# haichuan5121
别乱改代码,多个文件查重。
for /f "tokens=1-3 delims=," %%a in ('type *.csv ^|findstr /rbc:"[0-9][0-9]*,[0-9.][0-9.]*,[0-9.][0-9.]*"') do (
作者: 77七 时间: 2024-8-16 17:41
回复 10# haichuan5121
重定向 > 也改了吧...如果需要追加,把结果放到其它目录去。
作者: haichuan5121 时间: 2024-8-19 10:36
回复 12# qixiaobin0715
大哥误会了;小弟所有文本格式都是统一的;单文本就是TXT小插件转换后的CSV;样本完全一致; 需要执行的文本是多个类似CSV文件,不是单个CSV长文本,每个文本需要保留的是文本带数字部分前三列且不重复;
比如 A文本数字编号1-6有两遍 只保留一遍就行;第B文本和A不冲突,B文本也仅保留1-6标号的前三列;B文本和A文本之间的重复不需要去;
A文件内容
Function SHEET
Curr.Range AUTO
Volt Range AUTO
No X-Point Y-Point
1 80.2 16.8
2 270.8 16.8
3 448.3 16.8
4 678.5 16.8
5 875.4 16.8
6 1038.1 16.8
1 80.2 16.8
2 270.8 16.8
3 448.3 16.8
4 678.5 16.8
5 875.4 16.8
6 1038.1 16.8
B文件内容
Function SHEET
Curr.Range AUTO
Volt Range AUTO
No X-Point Y-Point
1 34.2 23.8
2 240.8 26.8
3 428.3 15.8
4 678.5 16.8
5 875.4 16.8
6 1038.1 16.8
1 34.2 23.8
2 240.8 26.8
3 428.3 15.8
4 678.5 16.8
5 875.4 16.8
6 1038.1 16.8
结果内容替换或新生产都行
No X-Point Y-Point
A 1 80.2 16.8
A 2 270.8 16.8
A 3 448.3 16.8
A 4 678.5 16.8
A 5 875.4 16.8
A 6 1038.1 16.8
No X-Point Y-Point
B 1 34.2 23.8
B 2 240.8 26.8
B 3 428.3 15.8
B 4 678.5 16.8
B 5 875.4 16.8
B 6 1038.1 16.8
作者: qixiaobin0715 时间: 2024-8-19 10:57
不是大家误会你了,而是你自说自话,自己没有说清楚,每次描述都不一样。让你上传文件,好像有多费劲似的,表达又不完整:- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('dir /b /a-d *.csv') do (
- echo,Filename,No,X-Point,Y-Point
- set n=1
- for /f "tokens=1-3 delims=," %%i in ('type "%%a"') do (
- if !n! equ %%i (
- echo,%%~na,%%i,%%j,%%k
- set /a n+=1
- )
- )
- ))>out.csv
- pause
复制代码
作者: czjt1234 时间: 2024-8-19 10:58
A文件内容
Function SHEET
Curr.Range AUTO
Volt Range AUTO
No X-Point Y-Point
1 80.2 16.8
2 270.8 16.8
3 448.3 16.8
4 678.5 16.8
5 875.4 16.8
6 1038.1 16.8
1 80.2 16.8
2 270.8 16.8
3 448.3 16.8
4 678.5 16.8
5 875.4 16.8
6 1038.1 16.8
这个每列之间的分隔符,是若干个空格,还是tab,还是逗号
如果是逗号,为什么要把逗号去掉再发出来?
生成的结果文件的分隔符,需要是若干个空格,还是tab,还是逗号?
作者: czjt1234 时间: 2024-8-19 11:00
光是猜你的源文件的格式就费老大的劲
甚至有时候还有文件编码格式是gbk还是utf8的
你弄个百度网盘,把两三个原文件,和需要的结果文件,放网盘,不行么?
作者: haichuan5121 时间: 2024-8-19 11:36
回复 18# qixiaobin0715
跪谢大神 这次是想要的结果
作者: haichuan5121 时间: 2024-8-19 11:39
回复 20# czjt1234
不好意思大哥们 ,公司内网文件加密了,限制复制和上传文件了,要么也不会让大哥们各种猜测了;谢谢各位 18楼大神已经给解了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |