がシステム上にある場合jot
は、LinuxではなくFreeBSDまたはOSXを実行していると思います。そのため、おそらく、のようなツールrl
やsort -R
利用可能なツールはありません。
心配ない。私は少し前にこれをしなければなりませんでした。代わりにこれを試してください:
$ printf 'one\ntwo\nthree\nfour\nfive\n' > input.txt
$ cat rndlines
#!/bin/sh
# default to 3 lines of output
lines="${1:-3}"
# default to "input.txt" as input file
input="${2:-input.txt}"
# First, put a random number at the beginning of each line.
while read line; do
printf '%8d%s\n' $(jot -r 1 1 99999999) "$line"
done < "$input" |
sort -n | # Next, sort by the random number.
sed 's/^.\{8\}//' | # Last, remove the number from the start of each line.
head -n "$lines" # Show our output
$ ./rndlines input.txt
two
one
five
$ ./rndlines input.txt
four
two
three
$
これは、awkを使用して乱数をもう少しきれいに挿入する1行の例です。
$ printf 'one\ntwo\nthree\nfour\nfive\n' | awk 'BEGIN{srand()} {printf("%8d%s\n", rand()*10000000, $0)}' | sort -n | head -n 3 | cut -c9-
sed
(FreeBSDとOSXの)バージョンが異なると、EREを処理-E
する代わりにオプションが必要になる場合があります-r
。明示的に使用する場合は、正規表現でBRE方言を使用する必要がありますが、テストしたものはすべてBREのエスケープされた境界で機能します。((HP / UXなど)の古いバージョンはsed
この表記法をサポートしていない可能性がありますが、これを行う方法をすでに知っている場合にのみ、これらの表記法を使用します。)