配列の補数をお探しですか?

配列の補数をお探しですか?

次からこの問題、ファイルからランダムな10行を抽出したかったので、残りの90行を別々のファイルにしたいと思います。

ドキュメントには 1 から 100 までのインデックスがある 100 行があるので、問題は find の補数で帰結しますind1, 2, ..., 100

ind=$(shuf -i 1-100 -n 10 | sort -n)

だから私の質問は

  1. 1, 2, ..., 100配列を効率的に生成する方法は?そして
  2. 完成するのに使えるようですcomm。それでは、commファイルの代わりに配列をどのように処理する必要がありますか?

ベストアンサー1

他のスレッドの私の提案に基づいて:

awk '
  BEGIN { srand(); do a[int(100*rand()+1)]; while (length(a)<10) }
  NR in a
' ~/orig.txt > ~/short.txt

これを変更して2つのファイルを作成できます。

awk -v range=100 -v offset=1 -v amount=10 '
  BEGIN { srand(); do a[int(range*rand()+offset)]; while (length(a)<amount) }
  NR in a    { print > "short.txt" }
  !(NR in a) { print > "rest.txt" }
' ~/orig.txt

(これは内部的にはawk使用できません~。ただし、HOMEthroughはENVIRON[]次のように使用できます:print > ENVIRON["HOME"] "/short.txt"またはresp., print > ENVIRON["HOME"] "/rest.txt".)

おすすめ記事