Bash
使用 zcat/gz 或替代方法從壓縮文本文件中選擇隨機行
我有一個簡單的 bash 腳本,可以從文本文件中隨機選取一行。這最初是用 來完成的
shuf file.txt | head -1
(用 可以達到相同的結果cat file.txt | shuf | head -1
)。我還將隨機線分配給變數 (a=$(shuf file.txt | head -1)
)。為了節省儲存空間,我壓縮了文本文件 (
gzip file.txt
) 並嘗試使用zcat
,如 inzcat 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 提出的方法感覺更好。
這適用於 bash 5.0.17(1):
zcat file.txt.gz | shuf -n1