GNU/Linux >> Linux の 問題 >  >> Linux

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

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

Linux
  1. シェルのコマンド出力から最初/最後の「n」行を削除するにはどうすればよいですか?

  2. ファイルに複数の行を追加するにはどうすればよいですか?

  3. ファイルまたはスクリプト内のパイプから複数の行を選択する方法は?

  1. シェルコマンドを使用してASCIIファイルの最初のN行を削除するにはどうすればよいですか?

  2. Vimでファイルのすべての行を削除する方法

  3. テキスト ファイル内の文字列を削除する

  1. sed を使用して空行を削除する

  2. テキスト ファイルから奇数行または偶数行を削除する

  3. sedを使用して、ファイル内の行の範囲内のテキストを検索して置換します