数値範囲をテキストファイルの完全な連続数値リストに変換します。

数値範囲をテキストファイルの完全な連続数値リストに変換します。

私の問題はその逆です。これ

私の入力ファイルは、場所とシリアル番号のリスト(在庫リストなど)です。一部のシリアル番号は範囲(例:11-17)としてリストされており、各範囲を完全なシリアル番号のリスト(例:11、12、13、14、15、16、17)に変換する必要があります。

入力形式は次のとおりです。

Main Street # 12770-12786, 12980, 13012-13013, 13068, 13093, 13115, 13122, 13137-13156, 13548-13557, 13954-13969, 14471-14475, 14500-14508

Madison Ave # 14071-14074, 14105-14128, 14131-14140, 14603-14612

各位置は空行で区切られます。各場所は名前で始まります。これまでは、[a-zA-Z -]大文字と小文字、スペース、ダッシュを含む名前だけを見ました。名前は新しい行のゼロ列で始まり、その後にスペース、ハッシュ値、スペースが続きます#

形式の各範囲に対して、カンマnnnn-mmmm(およびスペース)で区切られた順次値のリストを生成する必要があります。n1, n2, n3, n4, n5たとえば、Madison Ave(上記)のインベントリは次のようにリストする必要があります。

Madison Ave # 14071, 14072, 14073, 14074, 14105, 14106, 14107, etc.

入力はテキストファイルで、出力はテキストファイルです。 Bashで処理したいのですが、Pythonを使用することもできるようです。

私は次の解決策の可能な部分を知っています。

  1. grep を使用して、次のように正規表現パターンを使用して範囲を検索します。

    grep -o -P '\d+-\d+'<input_file>
    
  2. 最初の結果が範囲であると仮定します。4243-4263

    echo {4243-4263} | sed 's/-/../'
    
  3. 上記の結果には、次のようにforループを使用します。

    for i in {4243..4263}; do echo $i; done
    

これらすべてを単一のソリューションに統合する方法がわかりません。また、この問題を解決するより良い方法があるかもしれないと思います。

ベストアンサー1

フェルはどうですか?

  • 1 つ以上の数字、ダッシュ、1 つ以上の数字で構成されるすべてのシーケンスと一致します。(\d+)-(\d+)
  • nnnn...mmmm括弧内のPerl範囲式で数字のキャプチャシーケンスを書き換えます。
  • 結果をPerl式で評価し、配列を作成し、連結して適切に区切られた文字列を生成します。

だから

$ perl -pe 's/(\d+)-(\d+)/join ", ", ($1..$2)/ge' input
Main Street # 12770, 12771, 12772, 12773, 12774, 12775, 12776, 12777, 12778, 12779, 12780, 12781, 12782, 12783, 12784, 12785, 12786, 12980, 13012, 13013, 13068, 13093, 13115, 13122, 13137, 13138, 13139, 13140, 13141, 13142, 13143, 13144, 13145, 13146, 13147, 13148, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13548, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 13556, 13557, 13954, 13955, 13956, 13957, 13958, 13959, 13960, 13961, 13962, 13963, 13964, 13965, 13966, 13967, 13968, 13969, 14471, 14472, 14473, 14474, 14475, 14500, 14501, 14502, 14503, 14504, 14505, 14506, 14507, 14508

Madison Ave # 14071, 14072, 14073, 14074, 14105, 14106, 14107, 14108, 14109, 14110, 14111, 14112, 14113, 14114, 14115, 14116, 14117, 14118, 14119, 14120, 14121, 14122, 14123, 14124, 14125, 14126, 14127, 14128, 14131, 14132, 14133, 14134, 14135, 14136, 14137, 14138, 14139, 14140, 14603, 14604, 14605, 14606, 14607, 14608, 14609, 14610, 14611, 14612

おすすめ記事