条件を満たす任意の行セットを取得しようとしています。
たとえば、私のファイルが次のような場合:
a 1 5
b 4 12
c 2 3
e 6 14
f 7 52
g 1 8
次に、列3と列2の差が3より大きく10より小さい、正確に2つのランダムな行が必要です(たとえば、a、b、e、gで始まる行が適しています)。
この問題にどのように対処する必要がありますか?
awk (if something and random) '{print $1,$2,$3}'
ベストアンサー1
これを行うこともできますが、awk
行をランダムに選択するのは複雑で多くのコードが必要です。awk
あなたの基準に一致する行を取得し、標準ツールを使用してランダムに選択するためにshuf
使用します。
$ awk '$3-$2>3 && $3-$2 < 10' file | shuf -n2
g 1 8
a 1 5
数回実行すると、ランダムに選択された行が表示されます。
$ for i in {1..5}; do awk '$3-$2>3 && $3-$2 < 10' file | shuf -n2; echo "--"; done
g 1 8
e 6 14
--
g 1 8
e 6 14
--
b 4 12
g 1 8
--
b 4 12
e 6 14
--
e 6 14
b 4 12
--
このshuf
ツールはGNU coreutilsの一部であるため、ほとんどのLinuxシステムにデフォルトでインストールする必要があり、ほとんどの* nixで簡単に使用できます。