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