如何使用 Windows 命令行将一行拆分为多个较小的行?

问题描述 投票:0回答:1

我有大量数据。我想将它分成 3 个单独的行。 例如:

输入

391
896
635
702
041
635
027
177
495 

输出

391 896 635
702 041 635
027 177 495

是否只能使用 Windows 命令行来完成此操作? 期望 grep 命令或某种 1 行或小批处理文件来完成此操作,而无需使用 excel 或任何外部工具。

batch-file command-line grep
1个回答
0
投票

这是一个示例,说明当标记的长度变化/未知时,如何使用字符串长度函数从变量中解析给定数量的标记。

在循环的每次迭代之后,字符串定义将从前端修剪标记的长度+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
)
© www.soinside.com 2019 - 2024. All rights reserved.