我有大量数据。我想将它分成 3 个单独的行。 例如:
输入
391
896
635
702
041
635
027
177
495
输出
391 896 635
702 041 635
027 177 495
是否只能使用 Windows 命令行来完成此操作? 期望 grep 命令或某种 1 行或小批处理文件来完成此操作,而无需使用 excel 或任何外部工具。
这是一个示例,说明当标记的长度变化/未知时,如何使用字符串长度函数从变量中解析给定数量的标记。
在循环的每次迭代之后,字符串定义将从前端修剪标记的长度+1,以考虑尾随空白。当行定义被修剪超出其长度时,解析结束 - 也称为未定义。
@Echo off & Setlocal EnableExtensions
REM delayed expansion must not be enabled prior to Macro definition
(set ^"$\n=^^^
%= This creates an escaped Line Feed - DO NOT ALTER =%
)
REM $StrLen Source: https://www.dostips.com/forum/viewtopic.php?f=3&t=10983&sid=5cf312ccf7fedfa3db0d88ff90cd17f1#p69418
set $strLen=for /F "tokens=2" %%E in ("!! D """) DO for %%# in (1 2) do if %%#==2 ( %$\n%
for /f "tokens=1,2 delims=, " %%1 in ("!_!") do ( %$\n%
%= *** copy content to temporary variable, the carets are for extended length, up to 8191chars =% %$\n%
(set^^ _=!%%~2!) %$\n%
if defined _ ( %$\n%
set "_len=1" %$\n%
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do ( %$\n%
if "!_:~%%P,1!" neq "" ( %$\n%
set /a "_len+=%%P" %$\n%
set "_=!_:~%%P!" %$\n%
) %$\n%
) %$\n%
) ELSE set "_len=0" %$\n%
for %%V in (!_len!) do ( for %%E in (%%~E) DO endlocal ) ^& set "%%~1=%%V" %$\n%
) %$\n%
) else ( for %%E in (%%~E) DO setlocal EnableDelayedExpansion) ^& set _=,
Set "AddTo=!Random:~-%%i!"
Setlocal EnableDelayedExpansion
REM Generate an example input line
Set /a "Tkn[1]=!Random! %%3 +2","Tkn[2]=!Random! %%4 + 3","Tkn[3]=!Random! %%4 + 2"
Set "Line="
For /l %%i in (1 1 48)Do (
Set /a "TknLen=!Random! %%3 + 2"
For /f "Delims=" %%i in ("!TknLen!")Do (
If defined Line (
Set "Line=!Line! %AddTo%"
)Else Set "Line=%AddTo%"
) )
Echo(!Line!
Echo(
For /l %%i in (1 1 1000)Do if defined Line (%= Cease processing if Line undefined =%
For /f "Tokens=1,2,3" %%G in ("!Line!")Do (
Set "Group=%%G %%H %%I"
%$StrLen% Group.Len Group
Set /a Group.Len+=1
Echo(%%G %%H %%I
REM Modify Line definition by token groups length.
For /f "Delims=" %%i in ("!Group.Len!")Do Set "Line=!Line:~%%i!"
) )
(
Endlocal
Endlocal
Pause
)