sedを使用してリストからランダムに選択された5つのアイテムを検索するには?私のリストは次のとおりです。各項目は、行の先頭にアスタリスクで始まります。
* asterisk*
star
wildcard
* bee
hive
* car
tire
drive
* dove
white
peace
* eel
slippery
* fin
fish
* goat
* hinge
door
* ice
cold
* jam
bread
次のように、ランダムに5つの異なる項目が必要です。
* hinge
door
* ice
cold
* jam
bread
* asterisk*
star
wildcard
* eel
slippery
どうすればいいですか?
私はOSXを使用しており、sedではセミコロンを使用できません。 shufの代わりにgshufを使用する必要があります。私はこれを試しました:
sed -e '1b' -e 's/^*/\x0*/' mypath | gshuf -zn 5 | tr -d '\000'
しかし、null文字の代わりにリテラル「x0」を追加するようです。これは次のとおりです。
* asterisk*
star
wildcard
x0* bee
hive
x0* car
tire
drive
x0* dove
white
peace
x0* eel
slippery
x0* fin
fish
x0* goat
x0* hinge
door
x0* ice
cold
x0* jam
bread
解決策はありますか?
答え1
そしてgnu sed/shuf
:
sed '1b;s/^*/\x0*/' infile | shuf -zn 5 | tr -d '\000'
これは入力を nul で区切られたレコードに変換します。つまり、aで始まるすべての行*
(最初の行を除く)にnul文字を追加し、withスイッチを使用して*
5つのランダムレコードを抽出し、その文字を削除します。shuf
--zero-terminated
tr
答え2
cat listfile | tr '\n' , | sed 's/,\*/\n*/g;s/,$//' | shuf | head -n 5 | tr , '\n'