当我指定要打印的字段时,为什么 AWK 在默认的从文件读取记录操作中打印整行
Why is AWK printing the whole line in the default read record from file action when i specify the fields to be printed
#!/usr/bin/awk -f
BEGIN {
FS="><";
print "XML Tags";
}
{
for(x=1; x<=NF; x++) {
if (x==1) {
f=$x">";
} else {
f="<"$x">";
}
if (f!="\n") {
printf f"\n";
}
}
}
END {
print "End of tags";
} ;
大家好,
我有一个 XML 文件,全部在一行中。我正在使用上面的 AWK 脚本将它分成几行。
该脚本在单独的行上生成每个字段,然后再次打印整行。
因为这对我来说是一个学习练习,有人能指出我哪里做错了吗?
当我在默认操作前添加一个模式作为条件时,我仍然得到相同的输出,如上所述。我添加的模式是/SIZE/,这是文件中唯一一行的一个词。
我在 Gentoo 机器和 AIX 机器上看到的输出是一样的。所以一定是我的代码。
快把我逼疯了...
你可以使用 xmllint
来打印 XML:
而不是与 awk
打架
xmllint --format filename
对于 Solaris,您可以查看此 man page
你也可以查看this Q/A
答案是从脚本末尾删除 $1 - 它是 运行 ksh 脚本中 AWK 的遗留物
#!/usr/bin/awk -f
BEGIN {
FS="><";
print "XML Tags";
}
{
for(x=1; x<=NF; x++) {
if (x==1) {
f=$x">";
} else {
f="<"$x">";
}
if (f!="\n") {
printf f"\n";
}
}
}
END {
print "End of tags";
} ;
大家好,
我有一个 XML 文件,全部在一行中。我正在使用上面的 AWK 脚本将它分成几行。 该脚本在单独的行上生成每个字段,然后再次打印整行。
因为这对我来说是一个学习练习,有人能指出我哪里做错了吗?
当我在默认操作前添加一个模式作为条件时,我仍然得到相同的输出,如上所述。我添加的模式是/SIZE/,这是文件中唯一一行的一个词。
我在 Gentoo 机器和 AIX 机器上看到的输出是一样的。所以一定是我的代码。
快把我逼疯了...
你可以使用 xmllint
来打印 XML:
awk
打架
xmllint --format filename
对于 Solaris,您可以查看此 man page
你也可以查看this Q/A
答案是从脚本末尾删除 $1 - 它是 运行 ksh 脚本中 AWK 的遗留物