我有一个简单的 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