4

次のような約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を使用して可能ですか?

4

2 に答える 2

7

まず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
于 2013-02-25T10:56:26.917 に答える
3

を使用できる場合はawk、ワンライナーでも同じことができます

sort -R file | awk '{if (count[$3] < 10) {count[$3]++; print $0}}'
于 2013-02-25T11:08:05.253 に答える