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
是删除空行的另一种简洁方法。