文件中的增量数字模式

文件中的增量数字模式

我有一个仅包含以下行的文件:

BOF
(REF-REQ0001 SW_requirement)
EOF

我需要生成第二个文件,其中包含以下内容:

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主要使用,尽管tr生成了一堆空行并sed在前面添加了REQ位......

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

首先,它将两半保存在$l$rread。然后它将tr4096 个 nul 转换为\newlines - 它nl会计数并附加到$r,最后只是在完全退出输入之前sed添加$l到前 4096 个输入行中的每一行。q

或者更简单地使用 w/ seq

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

相关内容