90行のテキストファイルからランダムな10行を削除して、新しいファイルに出力したいと思います。 sedを使用してこれを実行しようとしていますが、2つの問題があります。使用しているもの:
sed -i $((1 + RANDOM & 90))d input.txt > output.txt
次に、コマンドを10回実行します(これを行うにはもっと良い方法があると思います!)
私が抱えている最初の問題は、エラーが発生することです:
sed:-e式#1、文字2:行アドレス0の使用が無効です
これは、1行目がすでに削除されている可能性があり、再試行しているという事実と関係があると思います。
2番目の問題は、同じコマンドを使用する前に機能したにもかかわらず、出力ファイルに何も書き込まれない場合があることです。
承認された回答:
おそらくRANDOM % 90
を使用したいと思うでしょう &
ではなく 。ここからゼロが出てきます(行1を削除しても問題ありません。次の実行では、行に1 .. 89の番号が付けられます)。
ただし、問題があります。数式が同じ数を数回生成する可能性があります。これを防ぐには、別の方法を使用します。数字をシャッフルして最初の10個を選びます。
shuf -i1-90 -n10 | sed 's/$/d/' | sed -f- input > output
sed
が気に入らない場合 sed
を生成する スクリプトでは、printf
を使用できます 、も:
sed -f <( printf %dd; $(shuf -i1-90 -n10) ) input > output