파일의 증분 숫자 패턴

파일의 증분 숫자 패턴

다음 줄만 포함된 파일이 있습니다.

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

BOFEOF파일의 일부인지 확실하지 않지만 어쨌든 다음 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"

첫째, 두 개의 반쪽을 $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'

관련 정보