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