我有一个包含空行的文本文件,我想选择除空行之外的一行。因此,我试图删除空行,选择一个随机行并写入文本文件。该文件就像;
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
需要任何帮助,谢谢!
答案 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