如何制作全长定义的测试数据?

如何制作全长定义的测试数据?

如何制作全长定义的测试数据?

感谢您对我的帖子的回复。

我希望制作一个测试数据来满足字段定义的完整长度。

例如,使用以下数据结构:

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' 作为分隔符?

我能做到以上几点吗?

我怎么做?

感谢您的指导。

更新:

感谢您分享代码。我确实测试了发布的代码。它产生所需的输出。

如果我想改进此代码以生成随机(FAKE)字符而不是“x”、“p”、“u”,Linux 命令是什么?所需的输出看起来像。

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

我需要根据数据类型制作一些数字,例如 923456.4532 等

我们如何使用

openssl 兰德 gpw

在这个脚本中?

我们正在使用“|”该脚本中的字段分隔符。如果我想将其更改为 ASCII \031 (\031 ^Y EM 介质结束 (?!)),将更改 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 部​​分中预先生成一个由 26 个字符串组成的数组,其中包含 1000 个字符,然后%.*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。

相关内容