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
Est-il possible, sous DOS, de fusionner un ensemble de fichiers de sorte que par exemple
a
b
c
et
1
2
3
deviennent
a 1
b 2
c 3
Tout comme la commande paste sur les systèmes *nix
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)
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;))
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." :-)
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
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.