繁体   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