文件包含:
Firstname=ABC
Lastname=XYZ
Country=USA
Firstname=DEF
Lastname=UVW
Country=UK
需要将Firstname
,lastname
和Country
作为参数传递给脚本中的函数,并对第二组重复相同的操作,依此类推。
函数用法:如果其中任何一个丢失,那么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
然后您可以在 shell 变量中测试您的返回代码$?
。如果它不为零,则说明输入文件中的某处缺少某个字段,并且该缺失字段及其后的所有命令都不会运行。