簡體   English   中英

刪除空行后,從文本文件中選擇隨機行

[英]selecting random line from text file after deleting empty lines

我有一個包含空行的文本文件,我想選擇除空行之外的一行。 因此,我試圖刪除空行,選擇一個隨機行並寫入文本文件。 該文件就像;

aaaa

bbbb


cccc

和輸出應該像;

bbbb

我可以使用以下方法刪除空行:

sed '/^\s*$/d' input.txt

我可以使用以下方法選擇一條隨機線:

echo $(shuf -n 1 input.txt) > output.txt

但是,我無法將它們組合在一起,但我無法使用。

echo $(shuf -n 1 $(sed '/^\s*$/d' input.txt)) > output.txt

它給該行的第二個單詞shuf: extra operand 'someWord'帶來了錯誤shuf: extra operand 'someWord'

需要任何幫助,謝謝!

您的第一個sed命令的輸出在哪里? 根據您所擁有的內容,將其轉到stdout。 它肯定會在$(...)子過程中輸出。 這意味着它們將直接作為命令行參數寫入外部子進程。

shuf命令試圖從stdin中獲取內容,而不是從命令行中獲取參數。

可能有效的方法(我沒有嘗試過)是管道。 嘗試這個

sed '/^\s*$/d' input.txt | shuf -n 1 >output.txt

希望這可以幫助

您需要執行外殼重定向,而不是外殼替換:

echo $(shuf -n 1 <(sed '/^\s*$/d' input.txt)) > output.txt

無論如何,可以將其簡化很多:

sed '/^\s*$/d' input.txt | shuf -n 1 > output.txt

您可以為此使用單個awk命令:

awk 'BEGIN{srand()} NF{row[++n]=$0} END{print row[int(rand() * n+1)]}' file

一種解決方案:

grep -v  '^$'  file | shuf -n 1 > output.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM