Bri*_*ick 0 sed awk perl sort shuf
我正在用降价语言为我的学生编写测验。其中一个测验可能如下所示:
% QUESTION
Who played drums for The Beatles?
(X) Ringo
( ) John
( ) Paul
( ) George
% QUESTION
What is the first line of MOBY DICK?
(X) Call me Ishmael.
( ) foo
( ) bar
( ) spam
( ) eggs
Run Code Online (Sandbox Code Playgroud)
我想随机化所有这些多项选择选项。所以,我想我需要一个 shell 脚本:
这可能吗?我知道,shuf并sort -R会随机的任何文本的线,但我不知道如何去隔离的选择这些块。
使用 AWK:
BEGIN {
srand()
answers[1] = ""
delete answers[1]
}
function outputanswers(answers, len, i) {
len = length(answers)
while (length(answers) > 0) {
i = int(rand() * len + 1)
if (answers[i]) {
print answers[i]
}
delete answers[i]
}
}
/^$/ {
outputanswers(answers)
print
}
/^[^(]/
/^\(/ {
answers[length(answers) + 1] = $0
}
END { outputanswers(answers) }
Run Code Online (Sandbox Code Playgroud)
这通过在answers数组中累积答案并在必要时以随机顺序输出其内容来工作。如果行以左括号开头,则被认为是答案(我希望这是对规范的有效简化)。