• XSS.stack #1 – первый литературный журнал от юзеров форума

Сохранить строки из файла 375 гигабайт

Airobusbr

CD-диск
Пользователь
Регистрация
27.12.2022
Сообщения
12
Реакции
1
Как можно сохранить строки из текстового файла длиной в 8 символов и к каждой строке добавить =AB-787-344. Нужно регулярное выражение или программу что знаете посоветуйте. Размер файла 375 гигабайт. EmEditor не открывает такие файлы.
 
Bash:
~ cat test_file
gsdfasdgagadfgdfg
a534535235rgggadfg
fgadfgadfgadfgadfgad
afgadfgadfgadfg
adfgadfgadfgadf
adfgadfgadfg
~ cut -b -8 test_file | sed 's/$/=AB-787-344/' | >> test_with_suffix
~ cat test_with_suffix
gsdfasdg=AB-787-344
a5345352=AB-787-344
fgadfgad=AB-787-344
afgadfga=AB-787-344
adfgadfg=AB-787-344
adfgadfg=AB-787-344

например вот так

ну или так

Bash:
~ awk '{print substr($0,0,8) "=AB-787-344";}' test_file >> test_with_suffix_2
~ cat test_with_suffix_2
gsdfasdg=AB-787-344
a5345352=AB-787-344
fgadfgad=AB-787-344
afgadfga=AB-787-344
adfgadfg=AB-787-344
adfgadfg=AB-787-344
 
Последнее редактирование:
А как этот скрипт запустить ?
Терминал Linux под любой оболочкой bash, fish, zsh, sh.
Если у тебя винда то не плохо такие моменты уточнять прямо в вопросе.
 
Windows у меня.
test.ps1
Код:
Param (
[string]$file_name,
[string]$add_string,
[string]$edited_file
)

$file = Get-Content $file_name
foreach ($line in $file)
{
$new_line = $line + $add_string
Out-File -FilePath $edited_file -InputObject $new_line -Append
}
Запускать:
.\test.ps1 .\news.txt ' test' .\new_file.txt

.\news.txt - твой файл
' test' - строка которая добавляется к каждой строке из файла
.\new_file.txt - новый файл куда все сохранится

Проверил на 22гб файле, работает быстро, не знаю как с 375гб будет, убедись что памяти хватает на диске, так как скрипт создаст такой же файл(чуть больше размером)
 
Windows у меня
Установите Git с сайта https://git-scm.com/, выбрав в процессе установки опцию Git Bash Here. Для запуска Bash в Windows, вам потребуется просто клацнуть по ярлыку Git Bash на рабочем столе или в меню Пуск и дождаться приглашения командной строки вида:
Bash:
username@HOST MINGW32 ~
$
Текущим каталогом будет C:\Users\username. И можно запускать unix команды, в т. ч. скрипты.
По теме топика, для извлечения всех строк не короче 8 символов, лучше применить вторую команду, она удалит дубликаты и отсортирует вывод.
Bash:
egrep -a -o '\b[[:print:]]{8,}\b' Ваш_файл
egrep -a -o '\b[[:print:]]{8,}\b' Ваш_файл | sort -u
 

Airobusbr


exe1.jpg

Такой софт реализовать не так уж и сложно, немного программирования и все. Размер конечно космический и что Вы в таких файлах храните ? :D.

Реализация, мои эксперименты:
  1. Windows не грузит, вообще, работает без использования оперативки (что логично при таких размерах) ПК.
  2. Добавил таймер, прогресс бар, статус поиска и вывод сообщения по завершению работы для того что бы просчитать скорость и было понятно когда программа завершит работу.
  3. Форма программы не зависает, работа в потоке.
  4. Остановить программу можно в любой момент нажатием на клавишу esc клавиатуры.
  5. Для того что бы программа скушала файл нужно его закинуть на форму софта.
Замеры скорости, собственно что у меня получилось:
  • Текстовый файл 19 миллионов строк с копейками.
  • Размер 1 гигабайт с строками разной длины.
  • Программа нашла строки длиной в 7 символов и добавила в конец каждой строки текст за 30 секунд.
  • То есть в среднем скорость работы 2 гигабайта в минуту.
Результаты тестов, видео



Протестируй на своей базе, будут какие погрешности то отпиши в тему, подправлю. А то я все таки напрягся и написал тебе утилиту ;).

Скрытый контент для зарегистрированных пользователей.
 
Последнее редактирование:
test.ps1
Код:
Param (
[string]$file_name,
[string]$add_string,
[string]$edited_file
)

$file = Get-Content $file_name
foreach ($line in $file)
{
$new_line = $line + $add_string
Out-File -FilePath $edited_file -InputObject $new_line -Append
}
Запускать:
.\test.ps1 .\news.txt ' test' .\new_file.txt

.\news.txt - твой файл
' test' - строка которая добавляется к каждой строке из файла
.\new_file.txt - новый файл куда все сохранится

Проверил на 22гб файле, работает быстро, не знаю как с 375гб будет, убедись что памяти хватает на диске, так как скрипт создаст такой же файл(чуть больше размером)
Он хотел только первые 8 символов с начала каждой строки. так что надо поправить
$new_line = $line + $add_string
на
$new_line = $line.Substring(0,8) + $add_string
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх