Я пытаюсь объединить текстовые файлы (из которых первый столбец равен всем) в один файл. Тысячи из них, которые я приобретаю в своих экспериментах. Я использую 3 входных файла в качестве примера, чтобы проиллюстрировать, что я пытаюсь достичь:
1.txt 2.txt 3.txt
l1 a1 l1 b1 l1 c1
l2 a2 l2 b2 l2 c2
l3 a3 l3 b3 l3 c3
Таким образом, все входные файлы имеют первый общий столбец.
Я хочу получить этот вывод:
out.txt
l1 a1 b1 c1
l2 a2 b2 c2
l3 a3 b3 c3
Попытка 1 из 3
:: hmm.bat=============================================
@echo off > hmm.txt & setLocal enableDELAYedeXpansion
echo AAAAAAAAAAaaaaaaaaaa............
pushd %*
for /f "tokens=1* delims= " %%a in (a1.txt) do (
>> hmm.txt echo. %%a hm
)
for %%j in (*.txt) do (
echo. %%j yes? >> hmm.txt
for /f "tokens=2* delims= " %%a in (%%j) do (
>> hmm.txt echo. %%a
)
)
popd
:: End_Of_Batch======================================
Этот пакетный файл извлекает нужные мне столбцы, но вместо этого все в отдельных столбцах, все данные в одном столбце. Мне не удалось получить вывод в отдельные столбцы.
Эта попытка (2 из 3) в конечном итоге даст то, что я хочу:
::=============================================
@echo off > tral.txt & setLocal enableDELAYedeXpansion
set N=
for /f "tokens=1* delims= " %%a in (a1.txt) do (
set /a N+=1 & call :sub1 %%a & set A!N!=!C!
)
set N=
for /f "tokens=* delims= " %%a in (a1.txt) do (
set /a N+=1 & call :sub1 %%a & set B!N!=!C!
)
set N=
for /f "tokens=* delims= " %%a in (a2.txt) do (
set /a N+=1 & call :sub1 %%a & set C!N!=!C!
)
set N=
for /f "tokens=* delims= " %%a in (a3.txt) do (
set /a N+=1 & call :sub1 %%a & set D!N!=!C!
)
for /L %%a in (1 1 !N!) do (
>> tral.txt echo. !A%%a! !B%%a! !C%%a! !D%%a!
)
goto :eof
:sub1 set C to last token
:loop
if '%2' neq '' (
shift
goto :loop
)
set C=%1
goto :eof
::================================================
Однако, чтобы распространить это на многие (тысячи) файлов, мне нужно было бы повторить бит
set N=
for /f "tokens=* delims= " %%a in (a*.txt) do (
set /a N+=1 & call :sub1 %%a & set x!N!=!C!
)
Мааааааааные времена. Я попытался использовать цикл вместо:
Попытка 3 из 3
::=============================================
@echo off & setLocal enableDELAYedeXpansion
type nul > slow.txt
set N=
for /f "tokens=1* delims= " %%a in (a1.txt) do (
set /a N+=1 & call :sub1 %%a & set A!N!=!C!
)
for %%j in (*.txt) do (
set N=
for /f "tokens=* delims= " %%a in (%%j) do (
set /a N+=1 & call :sub1 %%a & set x!N!=!C!
)
)
for /L %%a in (1 1 !N!) do (
>> slow.txt echo. !A%%a! !x%%a!
)
goto :eof
:sub1 set C to last token
:loop
if '%2' neq '' (
shift
goto :loop
)
set C=%1
goto :eof
::=============================================
Я получаю первый столбец (который объединяет все файлы данных) и второй столбец самого последнего файла данных.
Я не знаю, как обновить переменную x в! X %% a! для каждого файла, чтобы распечатать это в отдельном столбце.
В качестве альтернативы кто-нибудь знает, возможно ли выводить данные в конце выбранной строки в выходном файле?
Затем я должен отобразить его до конца первой строки, что приведет к отображению всех данных в столбцах.
Использование
set /P line1=< hmm.txt
, а затем
echo.%line1% %%a>>hmm.txt
не приводит к отражению в конце первой строки, а скорее в конце последней строки.
У кого-нибудь есть решение в любом случае?