zcat / gzまたは代替を使用して、圧縮されたテキストファイルから任意の行を選択します。

zcat / gzまたは代替を使用して、圧縮されたテキストファイルから任意の行を選択します。

テキストファイルから1行をランダムに選択する単純なbashスクリプトがあります。これはもともとを使用して行われましたshuf file.txt | head -1(を使用して同じ結果が得られますcat file.txt | shuf | head -1)。また、変数(a=$(shuf file.txt | head -1))にランダムな行を割り当てます。

保存スペースを節約するためにテキストファイル()を圧縮してgzip file.txt使用してみましたが、これによりbashはfile.txt.gzのすべての行を実行しようとしました(例:)。zcatzcat file.txt.gz | shuf | head -1file.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

おすすめ記事