Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 从大文件中删除特定行的最快方法是什么?_Go_Io_Bigdata - Fatal编程技术网

Go 从大文件中删除特定行的最快方法是什么?

Go 从大文件中删除特定行的最快方法是什么?,go,io,bigdata,Go,Io,Bigdata,从文件中删除行(包含特定子字符串)的最佳方法是什么 我曾尝试将整个文件加载到一个切片中,修改该切片,然后将该切片打印到一个文件中,效果很好,但当我想对大文件(例如50GB+)执行此操作时,这不起作用,因为我没有太多内存 我认为这在streams中是可能的,但我不知道如何同时读写(因为我必须通过子字符串搜索行,然后删除它)。 这是可能的,还是我必须读取整个文件并保护索引?如果是这样的话,最好的方法是什么?这会从标准输入读取数据并写入标准输出。请注意,我根据第二个答案(未测试)中的代码对其进行了改编

从文件中删除行(包含特定子字符串)的最佳方法是什么

我曾尝试将整个文件加载到一个切片中,修改该切片,然后将该切片打印到一个文件中,效果很好,但当我想对大文件(例如50GB+)执行此操作时,这不起作用,因为我没有太多内存

我认为这在streams中是可能的,但我不知道如何同时读写(因为我必须通过子字符串搜索行,然后删除它)。
这是可能的,还是我必须读取整个文件并保护索引?如果是这样的话,最好的方法是什么?

这会从标准输入读取数据并写入标准输出。请注意,我根据第二个答案(未测试)中的代码对其进行了改编


第一,不要用围棋。第二,你试过什么?包括你的代码。您遇到了什么具体的问题?您可以探索sed、awk等shell实用程序。如果您必须使用go,它的概念与其他任何东西都是一样的。一行一行地复制文件,跳过不需要的文件。如上所述,最好使用awk等。但是如果你想在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)
}