【发布时间】:2020-06-26 07:29:09
【问题描述】:
大家早上好!
我正在尝试让我的脚本读取用户输入,匹配 file.txt 中的关键字并根据该匹配返回一个随机分隔的响应。我可以匹配关键字并返回一个响应,但我不知道如何随机化许多可能的响应。
比如我在file.txt:
big bird|Big birds tend to be big.;;They have wings.
big truck|I love trucks!;;Ford makes nice big trucks.
red truck|Red is my favorite color.;;Red is also a name.
这是我的代码,它与第一个分隔符 (|) 配合使用并在它之后返回整个响应。
read -p " " query
response="$(awk -F\| -v r="$query" '$1==r{print $2;exit}' file.txt)"
echo "$query"
所以,例如:
输入:大鸟
输出:大鸟往往很大。;;它们有翅膀。
但我需要让它再次返回一个用双分号 (;;) 在同一行分隔的随机响应。
因此,当输入该输入时,它应该随机返回“大鸟往往是大的”。 或“他们有翅膀。”不能同时进行。
知道怎么做吗?
【问题讨论】:
-
1.过滤线与
big bird。 2. 将;;替换为带有sed的换行符。 3. 随机选择shuf的行。 -
我可能会有不同的想法 -- 更简单 -- 我会命名一个 文件
big bird-- 使用输入抓取big bird-- 打开它并抓取一条随机线(由硬中断\r\n分隔)并选择一条(某种)随机线,如sort -R input | head -n 1。 -- 作为一个迷你数据库本身 -- 您可以打开任何文件并根据需要添加/删除行。 -
有趣的想法扎克。但这是用于各种聊天脚本,file.txt 中可能有数千行。为每个预期的输入创建一个文件是不切实际的。需要找到一种方法在一个大文本文件中逐行处理此问题。我目前正在查看@KamilCuk 的建议并试图找到一种方法。 sed 的手册页令人困惑,但我可能会弄清楚。