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