我正在尝试将多个awk变量解析为for循环。我有一个由逗号分隔的多个字段组成的文档。每个字段都由awk捕获,我想使用这些变量在另一个文件中创建多个文本实例。我用过#34;而#34;捕获变量,但这只运行一次。
awk -F ',' '{print $1,$2,$3}' extensions.txt | while read var1 var2 var3; do
echo " <item context=\"active\" type=\"\" fav=\"false\" mod=\"true\" index=\"0\">
<number>$var3</number>
<number_type>sip</number_type>
<first_name>$var1</first_name>
<last_name>$var2</last_name>
<organization>Stackoverflow</organization>
</item>" > test.txt
done
exit
test.txt的输出是:
<item context=\"active\" type=\"\" fav=\"false\" mod=\"true\" index=\"0\">
<number>123456789</number>
<number_type>sip</number_type>
<first_name>Jon</first_name>
<last_name>Doe</last_name>
<organization>Stackoverflow</organization>
</item>
如果我使用for循环,它不会单独保留3个变量,而是将组合输出放在一个变量中。
答案 0 :(得分:3)
您无需使用awk
。您可以使用bash
(内部字段分隔符)自行执行IFS
。
使用此:
while IFS="," read v1 v2 v3 _
do
echo "<item context=\"active\" type=\"\" fav=\"false\" mod=\"true\" index=\"0\">
<number>$v1</number>
<number_type>sip</number_type>
<first_name>$v2</first_name>
<last_name>$v3</last_name>
<organization>Stackoverflow</organization>
</item>";
done < extensions.txt > output.txt
答案 1 :(得分:2)
你可以让Awk完成所有的工作。 awk会逐行处理,因此将awk放在一个文件中并使用awk -f your_program.awk
。
这样的事情应该有效:
{
print "<item content=\"active\" type=\"\" fav=\"false\" mod=\"true\" index=\"0\">"
print "<number>"$1"</number>"
print "<number_type>sip</number_type>"
print "<first_name>"$2"</first_name>"
print "<last_name>"$3"</last_name>"
print "<organization>Stackoverflow</organization>"
print "</item>"
}