전체 길이 정의로 테스트 데이터를 만드는 방법은 무엇입니까?

전체 길이 정의로 테스트 데이터를 만드는 방법은 무엇입니까?

전체 길이 정의로 테스트 데이터를 만드는 방법은 무엇입니까?

내 게시물에 답변해 주셔서 감사합니다.

필드 정의의 전체 길이를 만족하는 테스트 데이터를 만들고 싶습니다.

예를 들어 다음 데이터 구조를 사용합니다.

Name varchar (10)
Business Name varchar (15)
Address Varchar (20)

there are many more fields around 70-80 after above sample

파일에 "|" 구분 기호가 있는지 테스트

xxxxxxxxxx|uuuuuuuuuuuuuuu|pppppppppppppppppppp

위의 내용은 예시입니다. 이 필드는 더미 문자로 채워질 수 있습니다.

숫자(9,2)가 포함된 숫자와 같이 숫자인 경우

varchar와 같은 문자가 varchar(20)과 같이 문자와 숫자의 혼합인 경우

일부 파일은 ASCII '\031'을 구분 기호로 사용합니다.

Excel, Unix 도구를 사용하여 이 작업을 시도했지만 이해할 수 없습니다. 포럼의 안내가 필요합니다.

아래 주어진 awk 코드에서 다른 레코드 구조와 ASCII '\031'을 구분 기호로 추가하는 방법은 무엇입니까?

위의 작업을 수행할 수 있나요?

어떻게 해야 하나요?

안내해 주셔서 감사합니다.

고쳐 쓰다:

코드를 공유해 주셔서 감사합니다. 게시된 코드를 테스트했습니다. 원하는 출력이 생성됩니다.

"x", "p", "u" 대신 임의의(FAKE) 문자를 생성하도록 이 코드를 개선하려면 Linux 명령은 무엇입니까? 원하는 출력은 다음과 같습니다.

12x 15u 8z 6y 12q xxxxxxxxxxxx|uuuuuuuuuuuuuu|zzzzzzzz|yyyyy|qqqqqqqqqqqq AbXyTruxMgYu|ioPkLmByKuYnBgFr|DcMdWeqo|pnBBv|xmvbghYYueIr

923456.4532 등과 같은 데이터 유형을 기반으로 몇 가지 숫자를 만들어야 합니다.

우리가 사용하는 방법

openssl randgpw

이 스크립트에서?

이 스크립트에서는 "|" 필드 구분 기호를 사용하고 있습니다. 이를 ASCII \031(\031 ^Y EM END OF MEDIA(?!))로 변경하려면 Sep = "^Y"를 변경해야 합니까?

공유해 주셔서 감사합니다.

답변1

이 awk는 가변 길이 문자열을 생성합니다.

#! /bin/bash

Str () {

    Awk='
function Str (v, n, Local, x) {

    x = sprintf ("%*s", n, "");
    gsub (/./, v, x);
    return (x);
}
{ printf ("%s|%s|%s|\n", Str( "x", 12), Str( "u", 15), Str( "p", 8)); }
'
    echo | awk "${Awk}"
}

    Str

$ ./Str
xxxxxxxxxxxx|uuuuuuuuuuuuuuu|pppppppp|
$ 

대용량 파일에는 특히 효율적이지 않습니다. 예를 들어 BEGIN 섹션에 1000자로 구성된 26개의 문자열 배열을 미리 생성한 다음 %.*s필요한 길이와 필수 문자의 인덱스를 사용하여 형식을 지정하여 하위 섹션을 인쇄할 수 있습니다. 그런 다음 이러한 라인에 대한 개별 입력 사양을 읽을 수 있습니다(예: 20 d 16 z 42 q각 라인을 요구 사항에 맞게 조정). 다음과 같습니다(GNU/awk 4.1.4에서 테스트되었으며 결과는 표시되지 않음).

#! /bin/bash

Str () {

    Awk='
BEGIN {
    Sep = "|";
    split ("abcdefghijklmnopqrstuvwxyz", C, "");
    for (j in C) X[C[j]] = Str( C[j], 1000);
}
function Str (v, n, Local, x) {

    x = sprintf ("%*s", n, "");
    gsub (/./, v, x);
    return (x);
}
{ 
    for (f = 1; f < NF; f += 2) {
        printf ("%.*s%s", $(f), X[$(1 + f)], Sep);
    }
    printf ("\n");
}
'
    awk "${Awk}"
}

    Str <<'EOF'
12 x 15 u 8 z 
6 y 12 q
EOF

Excel이 어디에 있는지 잘 모르겠습니다. Excel에서 결과가 필요한 경우 CSV로 가져와야 합니다.

관련 정보