删除空行后,从文本文件中选择随机行

时间:2018-10-23 14:34:34

标签: bash shell

我有一个包含空行的文本文件,我想选择除空行之外的一行。因此,我试图删除空行,选择一个随机行并写入文本文件。该文件就像;

SQLOpenHelper()

输出应该像;

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

需要任何帮助,谢谢!

4 个答案:

答案 0 :(得分:2)

第一个sed命令的输出到哪里?根据您所拥有的内容,将其转到stdout。它肯定会在$(...)子过程中输出。这意味着它们将作为命令行参数直接写到外部子进程中。

shuf命令正在尝试从stdin中获取内容,而不是从命令行中获取参数。

可能有用(我没有尝试过)的是管道。试试这个

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

希望这会有所帮助

答案 1 :(得分:1)

您需要执行shell重定向,而不是shell替换:

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

在任何情况下,都可以将其简化很多

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

答案 2 :(得分:1)

您可以为此使用单个awk命令:

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

答案 3 :(得分:0)

一种解决方案:

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