全長定義でテストデータを作成するには?
私の投稿に答えてくれてありがとう。
フィールド定義の全長を満たすテストデータを作成したいと思います。
たとえば、次のデータ構造を使用します。
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|
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にインポートする必要があります。