次のような約1000行のファイルがあります。
ABC C5A 1
CFD D5G 4
E1E FDF 3
CFF VBV 1
FGH F4R 2
K8K F9F 3
... etc
100のランダムな行を選択したいのですが、3番目の列の値ごとに10があります(したがって、列3の値が「1」のすべての行からランダムに10行、列3の値が「2」のすべての行からランダムに10行など) )。
これはbashを使用して可能ですか?
まずgrep
、特定の番号を持つすべてのファイルをシャッフルし、を使用して最初の10個を選択しshuf -n 10
ます。
for i in {1..10}; do
grep " ${i}$" file | shuf -n 10
done > randomFile
がない場合はshuf
、代わりにを使用sort -R
してランダムに並べ替えます。
for i in {1..10}; do
grep " ${i}$" file | sort -R | head -10
done > randomFile
を使用できる場合はawk
、ワンライナーでも同じことができます
sort -R file | awk '{if (count[$3] < 10) {count[$3]++; print $0}}'