[英]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.