网友求助:我有很多行数据
[08:20:33.505]收←◆Node=0x1503,Temp=23.7
[08:20:36.492]收←◆Node=0x1503,Temp=23.7
[08:20:39.477]收←◆Node=0x1503,Temp=23.7
如何提取成两列
08:20:33 Temp=23.7
08:20:36 Temp=23.7
08:20:39 Temp=23.7
并输出为csv文件
以下是我在网上找到的
for /f "delims=" %%a in ('dir /b %time%\*.txt') do ((for /f "usebackq tokens=1-18" %%i in ("%time%\%%a") do (echo %%i,%%j,%%k,%%l,%%m,%%n,%%o,%%p,%%q,%%r,%%s,%%t,%%u,%%v,%%w,%%x,%%y,%%z))>"%time%\%%~na.csv")
但是我修改delims=[]后没反应,还跟原来一样
怎么修改?
仅以问题中的样例说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 从一个txt文本文件里提取指定特征的字符内容
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "current=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$current=$env:current;
$enc=[Text.Encoding]::GetEncoding('GB2312');
$files=@(dir -literal $current|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
if($files.length -ge 1){
write-host $files[0].FullName;
$text=[IO.File]::ReadAllLines($files[0].FullName, $enc);
for($j=0;$j -lt $text.length;$j++){
$m=[regex]::match($text[$j].trim(), '\[(\d+:\d+:\d+\.\d+)\].*(Temp=-?\d+(?:\.\d+)?)');
if($m.Success){$m.groups[1].value+"`t"+$m.groups[2].value;}
}
}