我有这样一句话:
The quick brown $UNKNOWN1 jumps over the $UNKNOWN2 dog
我有一个这样的世界列表:
me
black
lazy
swan
dog
word
sky
fox
nothing
you
如何将bash中的列表置换为具有以下所有排列:
The quick brown you jumps over the nothing dog
The quick brown fox jumps over the lazy dog
等等,所有排列。 我尝试了一些for循环,但卡住了因为我认为我需要循环内部循环(嵌套循环)。 类似的东西:
for i in `cat wordlist.txt`;
do echo "The quick brown $i jumps over the $UNKNOWN2 dog";
done
编辑:
我认为就是这样:
#!/bin/bash
for i in `cat wordlist.txt`
do
for a in `cat wordlist.txt`
do
echo "The quick brown $i jumps over the $a dog"
done
done
答案 0 :(得分:4)
只是为了好玩, GNU Parallel 也很擅长排列:
parallel echo The quick brown {1} jumps over the {2} dog :::: wordlist.txt :::: wordlist.txt
或者,相同但省略两个单词相同的行:
parallel 'bash -c "[ {1} != {2} ] && echo The quick brown {1} jumps over the {2} dog"' :::: wordlist.txt wordlist.txt
答案 1 :(得分:1)
我想我需要在循环内部循环。
你是对的:
ggplot(bladdercancer) +
geom_bar(aes(x = number, fill = tumorsize), position = "dodge")
您可以选择在for i in $(cat wordlist.txt)
do
for j in $(cat wordlist.txt)
do
echo "The quick brown $i jumps over the $j dog"
done
done
:
$i = $j
答案 2 :(得分:1)
还有一个没有循环的hacky替代方案:
printf "The quick brown %s jumps over the %s dog.\n" $(join -j 2 words words)
在这种情况下,join
会创建单词列表的笛卡尔积。结果是一个单词列表。这些单词中的每一个都作为参数传递给printf
printf
打印句子,将%s
替换为列表中的下一个单词。打印一次句子后,它仍然有未读的单词并一直持续到所有单词都被打印出来。
<强>优点:强>
缺点(与for i in $(cat wordlist)
完全相同)
*
或?
,则可能会bash
扩展这些单词。