ゼロの数に基づいて数を増やします。

ゼロの数に基づいて数を増やします。

"1234567890"lengthまでの繰り返しで構成された文字列が必要です72。ゼロ以外の数字を含む同じ長さの別の文字列。数字0の代わりに最初から数字が増加することを取得します1

だから文字列の場合

"1234567890123456789012345678901234567890"

次のような印刷結果が得られます。

         1         2         3         4
1234567890123456789012345678901234567890

私はこれを最後までしたい。72

すでに空白でゼロ以外の値を削除し始めていますが、その場所でインデックスを増やすことは0実際の問題です。

  wz="1234567890"  # Basic measure of ten
  hg="${wz}${wz}${wz}${wz}${wz}${wz}${wz}12"
  
  ha=${hg//[123456789]/" "}

  printf '%s\n' "$ha"
  printf '%s\n' "$hg"

答え1

この関数は必要な繰り返し(最大200文字)を実行し、引数に従ってそれを切り捨てます。

#! /bin/bash

Ruler () {  # (lth)

    local Tens Digs j

    printf -v Tens '%10d' {1..20}
    for (( j = 1; j <= 20; j++)); do Digs="${Digs}1234567890"; done
    printf '%s\n%s\n' "${Tens:0:${1}}" "${Digs:0:${1}}"
}

    Ruler 72
    Ruler 32

このように:

$ ./Hdsup
         1         2         3         4         5         6         7  
123456789012345678901234567890123456789012345678901234567890123456789012
         1         2         3  
12345678901234567890123456789012

答え2

awkのプログラムは、それぞれ一連の数字からなる2つの「ルーラー」を生成します。これ第二行には、数字の間に空白なしで1から10まで(10を0に置き換える)番号が付けられます。最初の行にも同様に番号が付けられていますが、各番号の間にはいくつかのスペースがあります。

プログラムは2つのオプションのコマンドラインパラメータを使用します。最初の引数は2番目の定規の全幅(デフォルトは80)で、2番目の引数は最初の定規番号のステップサイズまたはタブの幅(共通のタブ文字の幅なので、デフォルトは8)です。 Unix端末)。

例を実行してください:

$ ./ruler
       1       2       3       4       5       6       7       8       9       0
12345678901234567890123456789012345678901234567890123456789012345678901234567890
$ ./ruler 72
       1       2       3       4       5       6       7       8       9
123456789012345678901234567890123456789012345678901234567890123456789012
$ ./ruler 72 10
         1         2         3         4         5         6         7
123456789012345678901234567890123456789012345678901234567890123456789012
$ ./ruler 122 6
     1     2     3     4     5     6     7     8     9     0     1     2     3     4     5     6     7     8     9     0
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012

スクリプトruler:

#!/usr/bin/awk -f

BEGIN {
        width = ARGC >= 2 ? ARGV[1] : 80
        step  = ARGC >= 3 ? ARGV[2] : 8

        while (++i <= width) {
                if (i%step == 0) line1 = line1 sprintf("%*s", step, (i/step)%10)
                line2 = line2 (i%10)
        }

        print line1
        print line2
}

line2これは、基本的にループが繰り返されるたびに、文字列(2番目の定規)に次の数字を追加し、各反復で文字列while(最初の定規)に数値を含む正しいサイズ変更フィールドを追加します。stepline1step

このコードには幅の制限はなく、コマンドライン引数の削除や検証はありません。

関連情報