从大文件中删除特定行的最快方法是什么?
What is the fastest way to remove a specific line from a big file?
从文件中删除一行(包含特定子字符串)的最佳方法是什么?
我尝试将整个文件加载到一个切片中,修改该切片,然后将该切片打印到一个文件中,效果很好,但是当我想对大文件(例如 50GB+)执行此操作时,这不会'没用,因为我没有那么多内存。
我认为这对于流是可能的,但我没有弄清楚如何同时读取和写入(因为我必须通过子字符串搜索该行然后将其删除)。
这甚至可能还是我必须阅读整个文件并保护索引?如果是这样,最好的方法是什么?
这从标准输入读取并写入标准输出。请注意,我根据 reading file line by line in 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)
}
从文件中删除一行(包含特定子字符串)的最佳方法是什么?
我尝试将整个文件加载到一个切片中,修改该切片,然后将该切片打印到一个文件中,效果很好,但是当我想对大文件(例如 50GB+)执行此操作时,这不会'没用,因为我没有那么多内存。
我认为这对于流是可能的,但我没有弄清楚如何同时读取和写入(因为我必须通过子字符串搜索该行然后将其删除)。 这甚至可能还是我必须阅读整个文件并保护索引?如果是这样,最好的方法是什么?
这从标准输入读取并写入标准输出。请注意,我根据 reading file line by line in 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)
}