そのため、さまざまなスクリプト間で情報を保存する手段として、途中で中間テキスト ファイルを生成する一連のスクリプトがあります。基本的に、スクリプトは、ユーザーが削除を承認したデータ内の行を検出します。ソース ファイルから削除される行番号は、ファイルに格納されます。
たとえば、次のようなソース データ ファイルがあるとします。
a1,b1,c1,d1
a2,b2,c2,d2
a3,b3,c3,d3
a4,b4,c4,d4
a5,b5,c5,d5
a6,b6,c6,d6
a7,b7,c7,d7
中間ファイルには次のようなものが含まれます。
1 3 4 5 6
スクリプトを実行すると、出力データ ファイルは次のようになります。
a2,b2,c2,d2
a7,b7,c7,d7
これはすべて正常に機能し、このコードで修正するものは何もありません。問題は、実際のデータ ファイルを扱っているときに、文字通り数千の数値が削除のために中間ファイルに保存されている場合があることです。これは、膨大な時間がかかるため、ループを使用できないことを意味し、現在の使用方法sed
はerror: too many arguments
. 行番号の多くは連続しているので、ここで私の質問に行きます:
一連のスペースで区切られた数字が連続しているかどうかを検出する bash または awk の方法はありますか?
私はそれを超えてすべてを整理することができます.1つ/一連のステップでこれを行う方法に困惑しています. 私の計画は、連続した値を検出できれば、中間ファイルを次のように変更することです。
1 3 4 5 6
に:
1 3-6
そして、より管理しやすい方法で、値の各範囲で実行されるコードを記述できるようになります。
リスト内の何万もの数値を扱っているため、可能であれば、各値をループして、前の値よりも 1 ステップ上かどうかを個別に確認することは避けたいと思います。
これが bash/awk で不可能な場合、このタスクを実行してスクリプトに渡される引数の総数を減らし、引数が多すぎるためにエラーが発生する可能性を大幅に減らす別の方法はありますか?