首页 > 解决方案 > 将文件读入数组并写出块

问题描述

我有一个包含以下内容的文件:

1005
1010
1011
1012
1013
1014
1009
1015
1006
77
1016
1017
1018
1019
1020
1021
1022
1023
1008

我想将这些行读入一个数组,对它们进行排序并将具有 5 个元素的块写入一个新文件

输出文件应如下所示(每行五个元素。)

xyz 77,1005,1006,1008,1009
xyz 1010,1011,1012,1013,1014
...

我当前的批处理脚本如下所示:

@echo off &setlocal disabledelayedexpansion

Sort Knot_unsort.dat>Knot_sort.dat

set /A i=0

for /F "delims=" %%a in (Knot_sort.dat) do (
    set /A i+=1
    call set array[%%i%%]=%%a
)
call set n=%%i%%

for /L %%i in (1,1,%n%) do (
    set /a b = %%i %% 5

    if %b% == 0 (
        :: does not work
    )

    call echo %%b%%
)

对内容进行排序并将行读取到数组中。但在那之后我不知道如何将五个元素连接到一个新变量中并将它们写回到一个新文件中。我尝试使用模,但 if 语句不起作用。

标签: batch-filecmd

解决方案


这是相对简单的做法。此代码获取文件内容,对其进行排序,然后以五 (5) 个为一组输出。

powershell -NoProfile -Command ^
    "$items = Get-Content -Path '.\Knot_unsort.txt' | Sort-Object { [int]$_ };" ^
    "for ($i=0; $i -lt $items.Length; $i+=5) { 'xyz ' + $($items[$i..($i+4)] -join ',') }"

样本输出:

xyz 77 1005 1006 1007 1008
xyz 1009 1010 1012 1013 1014
xyz 1015 1016 1017 1018 1019
xyz 1020 1021 1022 1023

我不是一个代码高尔夫球手,但如果你需要一个单线:

powershell -nop "$items=gc .\Knot_unsort.txt|sort{[int]$_};for($i=0;$i-lt$items.Length;$i+=5){'xyz '+$($items[$i..($i+4)]-join',')}

推荐阅读