Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 删除空行后从文本文件中选择随机行_Bash_Shell - Fatal编程技术网

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

Bash 删除空行后从文本文件中选择随机行,bash,shell,Bash,Shell,我有一个包含空行的文本文件,我想选择除空行以外的一行。因此,我尝试删除空行,随机选择一行并写入文本文件。文件是这样的 aaaa bbbb cccc 输出应该是这样的 bbbb 我可以使用以下方法删除空行: sed '/^\s*$/d' input.txt 我可以使用以下方法选择一条随机线: echo $(shuf -n 1 input.txt) > output.txt 然而,我无法将它们结合在一起,我使用了这个,但没有起作用 echo $(shuf -n 1 $(sed '

我有一个包含空行的文本文件,我想选择除空行以外的一行。因此,我尝试删除空行,随机选择一行并写入文本文件。文件是这样的

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-operant'someWord'


需要帮忙吗,谢谢

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

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

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

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

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

shuf命令试图从stdin中获取某些内容,而不是从命令行获取参数

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

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

希望这对您有所帮助

您的第一个sed命令的输出到哪里去了?根据你所拥有的,它会转到标准输出。它肯定会在$(…)子进程中进行stdout。这意味着它们作为命令行参数直接写入外部子进程

shuf命令试图从stdin中获取某些内容,而不是从命令行获取参数

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

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

您可以使用单个
awk
命令:

awk 'BEGIN{srand()} NF{row[++n]=$0} END{print row[int(rand() * n+1)]}' file
一个解决方案:

grep -v  '^$'  file | shuf -n 1 > output.txt
一个解决方案:

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

awk'/bbbb/'文件足够了。awk'/bbbb/'文件足够了。
awk NF input.txt
是删除空行的另一种简洁方法。
awk NF input.txt
是删除空行的另一种简洁方法。