与えられたシーケンスで行を抽出する方法は?

与えられたシーケンスで行を抽出する方法は?

すべての文字が順番に含まれているテキストファイルから行のみを抽出するコマンドを見つけようとします。

800900100011001200..(下100) 369121518(上3)

上記のコマンドを含む行のみを印刷するために1つのコマンドでこれを実行できますか?それとも、各シーケンスに対してコマンドを作成する必要がありますか?

ベストアンサー1

perl1つの方法は、実験的な正規表現演算子を使用して(??{...})線形シーケンス内の3つ以上の小数点以下のシーケンスを処理することです。

perl -lne 'print if m{^(\d+)(\d+)(?=(.+$))(??{
  my $i = $2; my $r; my $l = length $3; my $incr = $2 - $1;
  while (length($r) < $l) {$i += $incr; $r .= $i}; $r})$}'

0000000000、0、0、または0、0、0、0、0、0、0を報告し、1、02、3も報告しますが、それはうまくいきませ10231203。前の2桁の後にはリストが必要です。前にゼロのない数字。

繰り返しますが、報告されますが、10-1最初の2つの数字で予想されたものとは異なります-101-

次の方法でこの問題を解決できます。

perl -lne 'print if m{^(-?\d+)(-?\d+)(?=(.+$))(??{
  my $i = $2; my $r, $sign, $value; my $m = $3; my $incr = $2 - $1;
  while (($i += $incr),
         (($sign, $value) = ($i =~ /(-?)(\d*)/)),
         $m =~ /^(${sign}0*$value)(.*)/) {
    $r .= $1; $m = $2;
  }; $r})$}'

12000034, -101, -1-2-3, 0-123-246... を報告します。

おすすめ記事