分解一个包含 3 个结构的文件,其中用空行分隔,并将 3 个结构中的数据附加到 3 个单独的新创建文件中



我正在尝试分解一个文件中有 3 个结构的文件,该文件由空行分隔,并将 3 个结构中的数据附加到 3 个单独的新创建文件中,每个文件对应每个结构

我有 100 个文件,每个文件都有 3 个由空行分隔的结构(下面列出),对于所有 100 个文件,结构保持不变。

对于示例,我正在获取 2 个文件(具有 3 个结构)

文件: 2018-02-02_hyderabad_hour_12.csv, 2018年02月02_hyderabad_hour_13.csv

文件"2018-02-02_hyderabad_hour_12.csv"的结构:

sno,employee name,address,location,zip code
1,aaaa,12/34,Hyderabad,500089
2,bbbb,12/35/44,chennai,500079
3,cccc,12/31/11,pune,500069
Cardnumber,cardname,card type,card limit
12345,visa,diamond,10000
2345,master,platinum,50000
Accno,bank name,branch code,Branch location,IFSE code
98765,sbi,23456,hyd,IFSE001
12457,citi,8765,usa,IFSE002
4444,axis,78767,India,IFSE003

文件"2018-02-02_hyderabad_hour_13.csv"的结构:

sno,employee name,address,location,zip code
4,QQQQ,12/34,DELHI,500089
5,RRRR,12/35/44,NOIDA,500079
6,SSSS,12/31/11,KOLKATA,500069
Cardnumber,cardname,card type,card limit
67890,visa,diamond,10000
8976,amex,platinum,50000
Accno,bank name,branch code,Branch location, IFSE code
98765,hdfc,23456888,hyd,IFSE004
12457,kotak,876588,usa,IFSE005
4444,bod,78767888,India,IFSE006

我们能够根据其结构将每个文件分成三个不同的文件,即文件"2018-02-02_hyderabad_hour_12.csv"现在被分成3个文件

FIle1_2018-02-02_hyderabad_hour_12.csv
File2_2018-02-02_hyderabad_hour_12.csv
File3_2018-02-02_hyderabad_hour_12.csv

但是我无法将第二个文件"2018-02-02_hyderabad_hour_13.csv"中的数据附加到创建的相同文件中(上面)

现在,我希望每个结构只有 3 个文件,例如(对于我在示例中获取的 2 个文件,我预计只有 3 个文件分别保存结构 1、结构 2 和结构 3 的数据) 即我想要一个批处理脚本,它将从多个文件将数据附加到一个文件中,如下所示

File1_2018-02-02_hyderabad_hour.csv应仅包含来自结构 1 的数据,2018-02-02_hyderabad_hour_12.csv2018-02-02_hyderabad_hour_13.csvFile2_2018-02-02_hyderabad_hour.csv应仅包含来自结构 2 的数据,2018-02-02_hyderabad_hour_12.csv2018-02-02_hyderabad_hour_13.csvFile3_2018-02-02_hyderabad_hour.csv应仅包含来自结构 3 的数据,2018-02-02_hyderabad_hour_12.csv2018-02-02_hyderabad_hour_13.csv

预期输出文件:File1_2018-02-02_hyderabad_hour.csv

sno,employee name,address,location,zip code,city
1,aaaa,12/34,Hyderabad,500089,hyderabad
2,bbbb,12/35/44,chennai,500079,hyderabad
3,cccc,12/31/11,pune,500069,hyderabad
4,QQQQ,12/34,DELHI,500089,hyderabad
5,RRRR,12/35/44,NOIDA,500079,hyderabad
6,SSSS,12/31/11,KOLKATA,500069,,hyderabad

File2_2018-02-02_hyderabad_hour.csv

Cardnumber,cardname,card type,card limit,city
12345,visa,diamond,10000,hyderabad
2345,master,platinum,50000,hyderabad
67890,visa,diamond,10000,hyderabad
8976,amex,platinum,50000,hyderabad

File3_2018-02-02_hyderabad_hour.csv

Accno,bank name,branch code,Branch location, IFSE code,city
98765,sbi,23456,hyd,IFSE001,hyderabad
12457,citi,8765,usa,IFSE002,hyderabad
4444,axis,78767,India,IFSE003,hyderabad
98765,hdfc,23456888,hyd,IFSE004,hyderabad
12457,kotak,876588,usa,IFSE005,hyderabad
4444,bod,78767888,India,IFSE006,hyderabad

我已经使用预期的结构更新了所需的输出文件。

请帮助我解决问题.提前谢谢。

@echo off
setlocal EnableDelayedExpansion
set "n=0"
for %%f in (*.csv) do (
set "input=%%f"
set "header="
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%%f"') do (
if not defined header (
set "header=%%b"
set /A "n=n%%3+1"
set "output=File!n!_!input:~0,-7!.txt"
if not exist "!output!" > "!output!" echo !header!
) else if "%%b" neq "" (
>> "!output!" echo %%b
) else (
set "header="
)
)
)
ren *.txt *.csv

您的"另一个要求"会导致完全不同的方法:

@echo off
setlocal enabledelayedexpansion
for %%x in (2018-??-??_hyderabad_hour_??.csv) do (
for /f "tokens=1-6 delims=-_" %%a in ("%%~nx") do (
for /f "delims=" %%A in (%%x) do (
if "%%A"=="sno,employee name,address,location,zip code" set "file=EmpInfo_Structure1_%%a-%%b-%%c_%%d_%%e.csv"
if "%%A"=="Cardnumber,cardname,card type,card limit" set "file=CardInfo_Structure2_%%a-%%b-%%c_%%d_%%e.csv"
if "%%A"=="Accno,bank name,branch code,Branch location,IFSE code" set "file=BankInfo_Structure3_%%a-%%b-%%c_%%d_%%e.csv"
if not exist "!file!" >"!file!" echo %%A
>>!file! (echo %%A|findstr /vbc:"sno,employee name," /vbc:"Cardnumber,cardname," /vbc:"Accno,bank name," ) 
)
)
)

最新更新