如何制作全长定义的测试数据?
感谢您对我的帖子的回复。
我希望制作一个测试数据来满足字段定义的完整长度。
例如,使用以下数据结构:
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。