繰り返し部分をハイフンで置き換えて数値リストを簡単に拡張するには?

繰り返し部分をハイフンで置き換えて数値リストを簡単に拡張するには?

注目!正規表現とサンプルデータを変更したため、一部の回答が間違っている可能性があります!これが悪い習慣なら謝ります。

私はgrep(オンラインツール)を使ってデータリストを抽出しました。ここで繰り返される部分は、時々ハイフン(-oフラグ)に置き換えられます。数字は常に8桁です。使用される正規表現の後には、8桁の数字が続くことがあります。[0-9]{8}(, -[0-9]*)*(, [0-9]{8})* 以下のデータの例:

33520470
33520850, -60, -70, -80, -90, 33630077
25453810
13815206, -07, -08, 60682651, 60709994
13340820
61040146, -55
60819060, -79
60819088

私が望む出力は次のとおりです。

33520470
33520850
33520860
33520870
33520880
33520890
33630077
25453810
13815206
13815207
13815208
60682651
60709994
13340820
61040146
61040155
60819060
60819079
60819088

grepでできますか?そうでない場合は、この結果を得るためにUnixや他のツールを提案できますか?私はsedまたはawkを考えています。

編集:この問題は修正されました。便宜上、コメントを注意深く読む必要がないように、ここに正しいコマンドを含めます。

-F ', ' '{ print $1; for(a=2;a <= NF; a ++){ if(length($a) <= 7){ printf("%s%s\n",substr($1,1,length($1)-(length($a)-1)),substr($a, 2))} else { print $a } } }'

ベストアンサー1

私はawkを使ってみました。

cat file | awk -F ', ' '{ print $1; for(a=2;a <= NF; a ++){printf("%s%s\n",substr($1,1,length($1)-(length($a)-1)),substr($a, 2)) } }'

出力:

33520470
33520850
33520860
33520870
33520880
33520890
25453810
13340820
61040146
61040155
60819060
60819079
60819088

編集する:

正しい結果を得るコード:

cat file | awk -F ', ' '{ print $1; for(a=2;a <= NF; a ++){ if(length($a) <= 3){ printf("%s%s\n",substr($1,1,length($1)-(length($a)-1)),substr($a, 2))} else { print $a } } }'

結果:

33520470
33520850
33520860
33520870
33520880
33520890
33630077
25453810
13815206
13815207
13815208
60682651
60709994
13340820
61040146
61040155
60819060
60819079
60819088

おすすめ記事