使用 zcat/gz 或替代方案从压缩文本文件中选择随机行

使用 zcat/gz 或替代方案从压缩文本文件中选择随机行

我有一个简单的 bash 脚本,它从文本文件中随机选取一行。这最初是用 完成的shuf file.txt | head -1(用 可以达到相同的结果cat file.txt | shuf | head -1)。我还将随机线分配给变量 ( a=$(shuf file.txt | head -1))。

为了保留存储空间,我压缩了文本文件 ( gzip file.txt) 并尝试使用zcat,如 中所示zcat file.txt.gz | shuf | head -1,但这会导致 bash 尝试执行 file.txt.gz 中的每一行(例如file.txt: line 1589: examplestring: command not found)。

如何在 bash 中从 gzip 压缩文本文件中选择随机行?我不反对使用替代压缩方法。

编辑:我最初的方法(a=$(zcat file.txt.gz | shuf | head -1))按预期工作,我一定是忽略了一个打字错误,我似乎无法重现它。 @gogoud 提出的方法感觉更好。

答案1

这对我来说适用于 bash 5.0.17(1):

zcat file.txt.gz | shuf -n1

相关内容