Какой самый быстрый способ удалить указанную c строку из большого файла? - PullRequest
0 голосов
/ 11 февраля 2020

Каков наилучший способ удалить строку (которая содержит указанную c подстроку) из файла?

Я попытался загрузить весь файл в фрагмент, изменить этот фрагмент и затем напечатать кусок к файлу, который работал хорошо, но когда я хочу сделать это с большими файлами (например, 50GB +), это не сработает, потому что у меня не так много памяти.

Я думаю, что это будет возможно с потоками, но я не понял, как читать и писать одновременно (потому что я должен искать строку через подстроку и затем удалять ее). Это вообще возможно, или я должен прочитать весь файл и сохранить индекс? Если это так, каков наилучший способ сделать это?

1 Ответ

1 голос
/ 11 февраля 2020

Это читает со стандартного ввода и записывает в стандартный вывод. Обратите внимание, что я адаптировал его из кода во втором ответе при чтении файла построчно в go (не проверено).

scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
    line := scanner.Text()
    if line != "unwanted" {
        fmt.Println(line)
    }
}
if err := scanner.Err(); err != nil {
    log.Fatal(err)
}
...