我有一个大约4500万行的大文件,大小约为1 GB.

我在我的WSL中使用了这个命令,删除重复行大约需要2分钟,而新文件大约有13M行:

root@DESKTOP-9PR0R3P:/mnt/c/Users/Saeed/Desktop/p/test# date; awk '!seen[$0]++' huge.txt > new2.txt; date
Sat May 20 10:58:06 +0330 2023
Sat May 20 11:00:10 +0330 2023

但我在PowerShell中使用了这个命令,大约15分钟后,我没有得到任何结果(即使文件大小仍然是0字节,并且不高于该大小):

gc huge.txt | sort | get-unique > new.txt

在Bash和PowerShell中,awksortget-unique有什么不同吗?

我用较小的文件try 了PowerShell命令,它起作用了(我的意思是命令本身是正确的).

推荐答案

Linq.Enumerable.Distinct()方法与System.IO.File个函数结合使用似乎相当快:

[IO.File]::WriteAllLines("$PWD\new.txt",
    [Linq.Enumerable]::Distinct(
        [IO.File]::ReadLines("$PWD\input_big.txt")
    )
)

在我的机器上,一个有5M行(305MB)的文本文件大约需要1 sec.

这通过仅使用.NET函数完全消除了PowerShell管道.此外,不会通过PowerShell传递文件数据,因为所有函数都可以在IEnumerable英寸长的S上运行.这可能是使用.NET语言所能达到的最快速度.

Linux相关问答推荐

我需要从 Ubuntu 中删除 .txt 文件中以白色间距分隔的行的白色间距

无法放弃所有权限,但可以放弃 CAP_SETUID 权限.

使用 ansible 验证 firewalld 配置

如何在 gcc 搜索路径上防止多个版本的 Boost?

Bash shift 改变了关联数组的期望值

如何在 AWS Linux 服务器上实现虚拟主机?

如何使用 GDB 和 QEMU 调试 Linux 内核?

Linux命令行如何接受没有pin的蓝牙设备配对

使用 rc.local 运行脚本:脚本有效,但在启动时无效

C hello world 的汇编输出的每一行是什么意思?

是否可以在 Linux x86 GAS 程序集中创建没有系统调用的线程?

列出当前目录和所有子目录中特定大小的文件

Monit 守护程序 - 连接到 monit 守护程序时出错

try 使用 sudo 将文件附加到根拥有的文件时权限被拒绝

CLOCK_MONOTONIC 和 CLOCK_MONOTONIC_RAW 有什么区别?

ldconfig 错误:使用 Linux 加载程序时不是符号链接

sed - 如何使用 sed 进行正则表达式组

使用 WGET 运行 cronjob PHP

如何查看线程在哪个 CPU 内核中运行?

学习内核编程