【问题标题】:How to do a script in BASH which takes random text from file? [duplicate]如何在 BASH 中执行从文件中获取随机文本的脚本? [复制]
【发布时间】:2010-10-28 23:21:15
【问题描述】:

我有这样的文件:

啊啊

bbb

ccc

ddd

哎呀


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

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

更新:我现在使用这个:

shuf -n 1 文本.txt

谢谢大家的帮助!

【问题讨论】:

  • 你有 python 或 perl 可用吗?
  • 该死的,5年标记为重复

标签: bash scripting awk sh


【解决方案1】:

我使用这样的脚本从我的 singature-quotes 文件中生成一个随机行:

#!/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"

【讨论】:

  • +1 虽然我可能会使用 sed -n "$selectedLineNumber/p" 打印选定的行,但我只是输入了几乎完全一样的解决方案
  • 可能会更好,但我有这个脚本很久了,我很确定当我写它的时候,我想我对 sed 不太了解。
【解决方案2】:

我会使用带有 p 参数的 sed...

sed -n '43p' 

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

我对 awk 了解不多,但我想你几乎可以做同样的事情(但我不知道 awk 是否已经完成......)

【讨论】:

    【解决方案3】:

    这是一种 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"
    

    【讨论】:

      猜你喜欢
      • 2017-08-03
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 2013-11-06
      • 2015-01-06
      • 1970-01-01
      • 2014-04-26
      相关资源
      最近更新 更多