ファイルの増分数値パターン

ファイルの増分数値パターン

次の行のみを含むファイルがあります。

BOF
(REF-REQ0001 SW_requirement)
EOF

次の内容で2番目のファイルを生成する必要があります。

BOF
(REF-REQ0001 SW_requirement)
(REF-REQ0002 SW_requirement)
(REF-REQ0003 SW_requirement)
EOF

つまり、最初の行を繰り返す必要があり、各行ごとに「REQ0001」の数字部分を1ずつ増やす必要があります。

答え1

Perlは次のような場合に便利です。

perl -ne 'for $n (1..4096) {s/\d+/ sprintf "%04d", $n /e; print}' File > File2

答え2

BOFそしてEOFファイルの一部かどうかはわかりませんが、とにかく次のawkコードを試してみることができます。

awk 'BEGIN{FS="REQ| "}/[[:digit:]]/{for(i=0;i<4096;i++){printf($1"REQ%04d "$3"\n",$2+i)};next}1'

答え3

これは、フィールド 2 を新しい値に置き換えて行全体を印刷し、行の後に表示されるフィールドの数に関係なく機能します。

awk -F 'REQ| ' '$1 == "(REF-" {field1 = $1; $1 = ""; num = $2; for (i = 0; i < 4096; i++) {$2 = sprintf("%sREQ%04d", field1, num + i); line = $0; sub("^ ", "", line); print line}; next} {print}' inputfile

複数行に分割:

awk -F 'REQ| ' '$1 == "(REF-" {
        field1 = $1; 
        $1 = ""; 
        num = $2; 
        for (i = 0; i < 4096; i++) {
            $2 = sprintf("%sREQ%04d", field1, num + i); 
            line = $0; 
            sub("^ ", "", line); 
            print line
        };
        next
    }
    {
        print
    }' inputfile

答え4

以下は空行を作成して前にビットを追加することnlですが、主な用途です。trsedREQ

IFS=\  read -r l r <file
tr \\0 \\n </dev/zero| 
nl -ba -w4 -nrz -s" $r"|
sed "s/^/${l%Q*}Q/;4096q"

まず、2つの半分を$l合計$rして維持しますread。次にtr4096 nulを\newlineに変換します。入力を完全に終了する前に、最初の4096入力行のそれぞれにnl計算して追加し、最後に追加します。$rsed$lq

またはもっと簡単にw /を使用してくださいseq

IFS=\  read -r l r <file
seq -ws " $r
${l%Q*}Q" 0 4097 | 
sed '1d;$d'

関連情報