sedを使用してテキストファイルから複数のランダムな行を削除する方法は?

sedを使用してテキストファイルから複数のランダムな行を削除する方法は?

90行のテキストファイルから任意の10行を削除して新しいファイルに出力したいです。私はこの作業にsedを使用しようとしましたが、2つの問題があります。私は以下を使用しています:

sed -i $((1 + RANDOM & 90))d input.txt > output.txt

その後、コマンドを10回実行します(より良い方法があるようです!)。

私が経験する最初の問題は、エラーが発生することです。

sed: -e 式 #1, char 2: ラインアドレス 0 の使用が無効です。

私はこれが行1を削除して再試行しているという事実に関連していると思います。

2番目の問題は、同じコマンドを使用する前に動作していましたが、出力ファイルに何も書き込まれない場合があることです。

ベストアンサー1

RANDOM % 90代わりに使用したいかもしれません&。ここで0が出ます(行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

おすすめ記事