0

私は内容が毎日変更されるテキストファイルoutput.txtを持っていますが、フォーマットは常に以下のようになります:

Minimum text string length= 5
Maximum text string length= 22
Maximum numeric string would be only upto 2 digit before and after decimal.

output.txt

OPERATINGSYSTEM SERVER1 SERVER2
Windows    1.36       4.42
Linux12    2.78       5.76
MacOS      3.45       6.39
Ubuntu      4.12       0.00
Android       0.00       3.46
FreePhysicalMemory    30.12      31.65
TotalVisibleMemorySize  48.00      48.00

次のように、コンテンツを適切に並べて列にフォーマットしたいと思います。

OPERATINGSYSTEM         SERVER1    SERVER2
Windows                  1.36       4.42
Linux12                  2.78       5.76
MacOS                    3.45       6.39
Ubuntu                   4.12       0.00
Android                  0.00       3.46
FreePhysicalMemory      30.12      31.65
TotalVisibleMemorySize  48.00      48.00

以下を試しましたが、出力が得られません:

@ECHO OFF
SETLOCAL
SET "spaces=                         "
SET "OPERATINGSYSTEM=MacOS"
SET /a SERVER1=3.45
CALL :formatout
SET "OPERATINGSYSTEM=TotalVisibleMemorySize"
SET /a SERVER1=48.00
CALL :formatout
GOTO :EOF
:formatout
CALL :padright name 15
CALL :padleft size 11
ECHO +%OPERATINGSYSTEM %+%SERVER1%+%SERVER2%
GOTO :eof
:padright
CALL SET padded=%%%1%%%spaces%
CALL SET %1=%%padded:~0,%2%%
GOTO :eof
:padleft
CALL SET padded=%spaces%%%%1%%
CALL SET %1=%%padded:~-%2%%
GOTO :eof

編集1

output.txtが以下の場合:

OPERATINGSYSTEM           PROJECTSERVER1 PROJECTSERVER2
Windows        1.36           4.42
Linux12        2.78       5.76
MacOS       3.45       6.39
Ubuntu        4.12       0.00
Android       0.00       3.46
FreePhysicalMemory      30.12      31.65
TotalVisibleMemorySize       48.00      48.00
CPULoadPercentage        2           4

私は t1 と t2 の spacelength のすべての可能な組み合わせを試していますが、次のように完全に一致したnewoutput.txtファイルを取得していません:

OPERATINGSYSTEM     PROJECTSERVER1   PROJECTSERVER2
Windows                       1.36             4.42
Linux12                       2.78             5.76
MacOS                         3.45             6.39
Ubuntu                        4.12             0.00
Android                       0.00             3.46
FreePhysicalMemory           30.12            31.65
TotalVisibleMemorySize       48.00            48.00
CPULoadPercentage                2                4

私が使用しているコード:

@ECHO OFF &SETLOCAL
set "t1=                     "
set "t2=           "
(for /f "tokens=1-3" %%a in (Managed.txt) do (
set "v1=%%a%t1%"&set "v2=%t2%%%b"& set "v3=%t2%%%c"
call echo(%%v1:~0,25%%%%v2:~-14%%%%v3:~-14%%
))>newoutput.txt
4

3 に答える 3

2
@echo off
    setlocal

    for /f "tokens=1-3" %%f in (output.txt) do call :formatOut %%f %%g %%h 

    endlocal
    exit /b

:formatOut
    setlocal
    set "spaces=                                     "
    set col1=%~1%spaces%
    set col1=%col1:~0,30%
    set col2=%spaces%%~2
    set col2=%col2:~-7%
    set col3=%spaces%%~3
    set col3=%col3:~-7%

    echo %col1% %col2% %col3% 

    endlocal
    goto :EOF

ファイル出力を生成するには、次のように呼び出します。formatData.cmd > finalFile.txt

于 2013-10-25T11:24:09.440 に答える
0

GNU utils から awk をインストールし、これを使用します (情報がファイル "a" にあると仮定します):

awk '{printf("%-24s %12s %12s\n",$1,$2,$3)}' a
于 2013-10-25T11:26:13.810 に答える