Bash

使用 zcat/gz 或替代方法從壓縮文本文件中選擇隨機行

  • December 21, 2021

我有一個簡單的 bash 腳本,可以從文本文件中隨機選取一行。這最初是用 來完成的shuf file.txt | head -1(用 可以達到相同的結果cat file.txt | shuf | head -1)。我還將隨機線分配給變數 ( a=$(shuf file.txt | head -1))。

為了節省儲存空間,我壓縮了文本文件 ( gzip file.txt) 並嘗試使用zcat,如 in 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 提出的方法感覺更好。

這適用於 bash 5.0.17(1):

zcat file.txt.gz | shuf -n1

引用自:https://unix.stackexchange.com/questions/683294