次からこの問題、ファイルからランダムな10行を抽出したかったので、残りの90行を別々のファイルにしたいと思います。
ドキュメントには 1 から 100 までのインデックスがある 100 行があるので、問題は find の補数で帰結しますind
。1, 2, ..., 100
ind=$(shuf -i 1-100 -n 10 | sort -n)
だから私の質問は
1, 2, ..., 100
配列を効率的に生成する方法は?そして- 完成するのに使えるようです
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
使用できません~
。ただし、HOME
throughはENVIRON[]
次のように使用できます:print > ENVIRON["HOME"] "/short.txt"
またはresp., print > ENVIRON["HOME"] "/rest.txt"
.)