ファイルには以下が含まれます。
Firstname=ABC
Lastname=XYZ
Country=USA
Firstname=DEF
Lastname=UVW
Country=UK
Firstname
、lastname
およびをスクリプトの関数にパラメータとして渡し、Country
2番目のグループに対して同じ操作を繰り返す必要があります。
関数の使用法:そのうちの1つが欠落している場合は終了Country=
し、3つのパラメーターすべてに値がある場合はコマンドを実行する必要があります。
答え1
たぶんこのようなことを試してみることができますか?
awk 'BEGIN{RS="\n\n"}
{
split($1, a, "="); fname = a[2];
split($2, b, "="); lname = b[2];
split($3, c, "="); country = c[2];
if (fname != "" && lname != "" && country != "") {
command = "/path/to/your/script.sh "fname" "lname" "country;
system(command);
}
}' input_file.txt
/path/to/your/script
交換してみましたが、echo
フィールドは正しい順序で表示されます。
特定の名前、姓、国の組み合わせのフィールドが欠落している場合、その特定の組み合わせに対してコマンドは実行されず、次の組み合わせに直接移動します。
awkコマンドが空のフィールドを検出したときにゼロ以外の戻りコードで終了し、次の組み合わせでコマンドを実行したくない場合は、次のようにします。
awk 'BEGIN{RS="\n\n"}
{
split($1, a, "="); fname = a[2];
split($2, b, "="); lname = b[2];
split($3, c, "="); country = c[2];
if (fname != "" && lname != "" && country != "") {
command = "/path/to/your/script.sh "fname" "lname" "country;
system(command);
} else {
print "error: empty field in input file !";
exit 1
}
}' input_file.txt
その後、シェル変数で戻りコードをテストできます$?
。 0以外の場合、入力ファイルのどこかにフィールドがありません。