Вопрос или проблема
У меня есть текстовый файл, в котором миллионы строк. Я хочу удалить весь текст перед строкой test:
включая эту строку. Также хочу удалить текст после пробела.
Некоторое содержимое файла:
file1:test:src/draw/no/ind/erefe.c/gegegewg 1
filesdsd:test:src/draw/no/ind/reryeryrey.c/jhrtjtrj 1
fileskdk:sdsD:test:abc/disp/no/ind/ryretyrey.txt/Display::Restrict 20
Желаемый вывод:
src/draw/no/ind/erefe.c/gegegewg
src/draw/no/ind/reryeryrey.c/jhrtjtrj
abc/disp/no/ind/ryretyrey.txt/Display::Restrict
У меня есть следующий код, который удаляет текст после /
из файла и также выводит строки в командной строке, так как в нем есть echo
.
for /f "tokens=1 delims=/" %a in (abc.txt) do (echo %a >> newfile.txt)
Я хочу изменить вышеупомянутый код, чтобы получить желаемый вывод. Но без вывода строк в командной строке, так как это занимает много времени.
Вот ваша команда:
cut -d " " -f1 file.txt | sed -e '1,$s/^\(.*\):test:\(.*\)$/\2/' > new_file.txt
или если вы можете изменить оригинальный файл:
sed -i '1,$s/^\(.*\):test:\(.*\) .*$/\2/' file.txt
Обновление: Я не заметил, что вопрос был для платформы Windows. Однако sed также существует для Windows, который можно установить несколькими способами:
https://stackoverflow.com/questions/127318/is-there-any-sed-like-utility-for-cmd-exe
Ответ или решение
Удаление текста до определенной строки в файле на Windows с помощью командной строки
Если у вас есть текстовый файл с миллионами строк, и вы хотите удалить весь текст перед строкой test:
(включая саму строку), а также удалить текст после пробела, вы можете использовать командный файл (batch file) в Windows для достижения этой цели. Метод, который описан ниже, позволит вам выполнить эту задачу эффективно, экономя ресурсы и время.
Подход с использованием командной строки Windows
Вы можете использовать цикл for
и встроенные возможности командной строки для обработки вашего файла. Ниже приведен пример кода, который может справиться с поставленной задачей:
@echo off
setlocal enabledelayedexpansion
REM Укажите имя входного файла и выходного файла
set "inputFile=abc.txt"
set "outputFile=newfile.txt"
REM Очистить выходной файл, если он существует
> "%outputFile%" (
REM Чтение входного файла построчно
for /f "usebackq delims=" %%a in ("%inputFile%") do (
REM Найти позицию строки 'test:'
set "line=%%a"
set "modifiedLine=!line:*test:=!"
REM Удалить текст после первого пробела
for /f "tokens=1*" %%b in ("!modifiedLine!") do (
echo %%b >> "%outputFile%"
)
)
)
endlocal
Объяснение кода
-
Инициализация:
- Ключ
@echo off
отключает вывод команд в консоль, так что вы не будете видеть промежуточные результаты. Это помогает повысить производительность при работе с большим объемом данных. - Команда
setlocal enabledelayedexpansion
позволяет использовать переменные в блокахfor
.
- Ключ
-
Настройка файлов:
- Переменная
inputFile
содержит имя входного текстового файла (заменитеabc.txt
на ваш файл). - Переменная
outputFile
задает имя выходного файла, в который будут записаны результаты.
- Переменная
-
Очистка выходного файла:
> "%outputFile%"
очищает файл или создает новый, если он не существует.
-
Чтение входного файла:
- Цикл
for /f
читает файл построчно, причемusebackq
позволяет использовать кавычки для имен файлов, которые могут содержать пробелы. set "line=%%a"
хранит текущую строку в переменнойline
.
- Цикл
-
Удаление текста до
test:
:set "modifiedLine=!line:*test: =!"
удаляет все до строкиtest:
(включительно).
-
Удаление текста после пробела:
- Вложенный цикл
for
используется для разделения строки по пробелу. Командаtokens=1*
позволяет сохранить первую часть строки до пробела в переменной%%b
и всё остальное в%%c
, если это необходимо.
- Вложенный цикл
-
Запись результата:
- Команда
echo %%b >> "%outputFile%"
записывает обработанную строку в выходной файл.
- Команда
Заключение
Данный способ является эффективным и надежным методом для обработки больших текстовых файлов в Windows. Используя команды командной строки, вы можете быстро и без значительных затрат ресурсов удалить ненужные данные из строк. Запись результата в новый файл обеспечивает сохранение исходных данных, что важно для предотвращения потерь информации.
Для повышения производительности рекомендуется запускать скрипт на компьютере с достаточным объемом оперативной памяти и мощным процессором, особенно если файл содержит миллионы строк.