大量のテキストデータ(csvとかとか)をランダムに間引きたい時ってありますよね?
概ね 1/N にランダムに絞りたいときはこうするのが手っ取り早いです
cat "テキストファイル名" | perl -ne 'print if !int(rand N)' >"出力ファイル名"
軽く試してみるとこんな感じです
# 1から10,000までの連番を、概ね1/1,000 に間引く
$ seq 10000 | perl -ne 'print if !int(rand 1000)' | nl
1 535
2 1211
3 1320
4 1806
5 3102
6 4458
7 5034
8 5256
9 5959
10 6208
11 6575
12 7511
13 9169
14 9940
/dev/urandom を使って概ね 1/1000 に間引く例です
tr -dc '0-9' </dev/urandom | fold -w3 | head -n $(wc -l <入力ファイル名) | paste -d, - 入力ファイル名 | sed -n '/^000/{s/^....//;p}'
100,000 までのファイルを作り抽出した例です
Macなので tr の前に LANG=C がついてたり、sed -> gsed とか変ですが気にしないで雰囲気だけ掴んで下さい
$ seq 100000 >/tmp/dummy.txt
$ LANG=C tr -dc '0-9' </dev/urandom | fold -w3 | head -n$(wc -l </tmp/dummy.txt) | paste -d, - /tmp/dummy.txt | gsed -n '/^000/{s/^....//;p}' | nl
1 928
(略)
88 98956