如何在 BASH 中编写从文件中获取随机文本的脚本?

发布于 2024-07-21 13:20:28 字数 269 浏览 11 评论 0原文

我有这样的文件:

aaa

bbb

ccc

ddd

eee


我想在 BASH 中执行一个脚本,它可以获取此文本文件的随机行,并将其作为变量或其他内容返回给我。

我听说可以用一些 AWK 来完成。 有任何想法吗?

更新:我现在使用这个:

shuf -n 1 text.txt

谢谢大家的帮助!

I have file like:

aaa

bbb

ccc

ddd

eee


And I want to do a script in BASH which can takes random line of this text file, and return it to me as variable or something.

I hear it can be done with some AWK.
Any ideas?

UPDATE: I now using this:

shuf -n 1 text.txt

Thanks you all for help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萝莉病 2024-07-28 13:20:28

我使用这样的脚本从我的签名引用文件中生成随机行:

#!/bin/bash

QUOTES_FILE=$HOME/.quotes/quotes.txt
numLines=`wc -l $QUOTES_FILE | cut -d" " -f 1`

random=`date +%N`

selectedLineNumber=$(($random - $($random/$numLines) * $numLines + 1))
selectedLine=`head -n $selectedLineNumber $QUOTES_FILE | tail -n 1`

echo -e "$selectedLine"

I used a script like this to generate a random line from my singature-quotes file:

#!/bin/bash

QUOTES_FILE=$HOME/.quotes/quotes.txt
numLines=`wc -l $QUOTES_FILE | cut -d" " -f 1`

random=`date +%N`

selectedLineNumber=$(($random - $($random/$numLines) * $numLines + 1))
selectedLine=`head -n $selectedLineNumber $QUOTES_FILE | tail -n 1`

echo -e "$selectedLine"
三生一梦 2024-07-28 13:20:28

我会使用 sed 和 p 参数...

sed -n '43p' 

其中 43 可以是一个变量...

我对 awk 不太了解,但我想你可以做几乎相同的事情(但是我不知道 awk 是否图灵完整。 ..)

I would use sed with p argument...

sed -n '43p' 

where 43 could be a variable ...

i don't know much about awk but i guess you could do almost the same thing (however i don't know if awk is turing complete...)

瀞厅☆埖开 2024-07-28 13:20:28

这是一种 bash 方式,无需任何外部工具

IFS=
\n'
set -- $(<"myfile")
len=${#@}
rand=$((RANDOM%len+1))
linenum=0
while read -r myline
do
  (( linenum++ ))
  case "$linenum" in
   $rand) echo "$myline";;
  esac
done <"myfile"

here's a bash way, w/o any external tools

IFS=
\n'
set -- $(<"myfile")
len=${#@}
rand=$((RANDOM%len+1))
linenum=0
while read -r myline
do
  (( linenum++ ))
  case "$linenum" in
   $rand) echo "$myline";;
  esac
done <"myfile"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文