1 votes

Comment puis-je fusionner des fichiers ligne par ligne dans la ligne de commande Windows ?

Est-il possible, sous DOS, de fusionner un ensemble de fichiers de sorte que par exemple

1.txt

a
b
c

et

2.txt

1
2
3

deviennent

merged.txt

a 1
b 2
c 3

Tout comme la commande paste sur les systèmes *nix

1voto

Stefan Schweizer Points 151

Non, vous devrez fusionner les lignes avec un programme, ou un langage de script, comme Python.

Mise à jour: Regardez ces ports Win des utilitaires GNU, cela inclut paste (.exe)

1voto

JeremyDWill Points 2181

Si les données sont assez simples, vous pourriez le faire avec Excel. Ou vous pourriez télécharger OpenOffice et le faire dans Calc, mais la méthode dans Calc est pénible. (Vous devez coller les données dans deux colonnes puis les fusionner avec la fonction "Concaténer", sous forme de formule (par exemple concaténer(Rangée1; rangée2;))

1voto

walrus helmet Points 6812

Je suis tout à fait d'accord qu'un portage des outils Unix ou d'un langage de script est la voie à suivre (bien que VBScript ou Powershell soient probablement des choix plus pratiques que Python pour les utilisateurs de Windows), mais fusionner deux fichiers EST possible en DOS:-

@ECHO OFF

REM .bat pour fusionner 1.txt et 2.txt

GOTO :Main

:StartMerge
    SET /P _a=<%1
    SET /P _b=<%2

    ECHO %_a% %_b%

    DEL %1 %2

    GOTO :EndMerge

:CleanUp
    SET _LinesIn1=
    SET _LinesIn2=

    SET _a=
    SET _b=

    GOTO :EOF

:Main
    SET _LinesIn1=0
    SET _LinesIn2=0

    FOR /F "delims=: tokens=1,*" %%i IN ('findstr /n "^" 1.txt') DO (
        ECHO.%%j>_c1n%%i
        SET /A _LinesIn1+=1
    )

    FOR /F "delims=: tokens=1,*" %%i IN ('findstr /n "^" 2.txt') DO (
        ECHO.%%j>_c2n%%i
        SET /A _LinesIn2+=1
    )

    IF %_LinesIn1% NEQ %_LinesIn2% (
        ECHO Impossible de fusionner les fichiers; nombre de lignes non correspondant:-
        ECHO   1.txt - %_LinesIn1% lignes
        ECHO   2.txt - %_LinesIn2% lignes

        DEL _c*

        GOTO :CleanUp
    )

    FOR /L %%n IN (1, 1, %_LinesIn1%) DO (
        CALL :StartMerge _c1n%%n _c2n%%n

        :EndMerge
        REM No-op pour éviter l'erreur ") était inattendu à ce moment."

    )

    GOTO :CleanUp

À classer sous "Juste parce que vous pouvez ne signifie pas que vous devriez." :-)

0voto

Zimba Points 753

Fusionner 2 fichiers texte :

for /f "tokens=*" %i in ('find /c /v "" ^< test2.txt') do set /a n=%i<nul
for /l %a in (1,1,%n%) do (
for /f "tokens=*" %i in ('find /v /n "" ^< test1.txt ^| find "[%a]"') do (
for /f "tokens=*" %j in ('find /v /n "" ^< test2.txt ^| find "[%a]"') do (
set a=%i
set b=%j
set a=!a:*]=!
set b=!b:*]=!
echo:!a! !b!>>merged.txt
)))

test1.txt :

a
b
c

test2.txt :

1
2
3

merged.txt :

a 1
b 2
c 3

Testé sur Win 10 CMD

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X