如何在 Linux 上通过管道传输大型文本文件时有效地对其进行混洗?

如何在 Linux 上通过管道传输大型文本文件时有效地对其进行混洗?

我有一个几 GB 大小的文本文件。我正尝试在管道中随机播放此文本文件。

例如,这些是我正在使用的一些示例行,但它效率不高,事实上,直到读取整个文件后管道才开始启动。也许我错了。

shuf HUGETEXTFILE.txt|some command

cat HUGETEXTFILE.txt|sort -R |some command

我也尝试过使用

split -n 1/numberofchunks HUGETEXTFILE.txt|sort -R|some command 

但当第一块完成时管道就结束了。

我正在尝试寻找一种有效的方法在管道中管道传输文本文件,因为我不想每次需要一种新的洗牌方式或随机分布时都写入数百个文件。

谢谢

答案1

你可以尝试这个方法:

cat bigfile.txt|
  while IFS= read -r line; do
    echo '%s\n' "$line" |shuf |sort -n| grep "sample";
  done

这里使用 IFS 将输出分成几行。

相关内容