如何使用AWK从文件读取并输出到html表

如何使用AWK从文件读取并输出到html表,awk,Awk,我是AWK的新手,我知道这不是一个具体的问题。我只是需要一些建议我该怎么做 在文件中给定以下名称,author.list: KOVACS PETER Kiss Roland Nagy jolan Lisztes Tibor Feher aNDRas Korma Maria Akarki Jack 编写一个AWK程序,可以从文件中读取名称,并将其打印到输出文件中三列格式的html表格中,output.html。表格的呈现方式如下: Kovacs Peter Lisztes Ti

我是AWK的新手,我知道这不是一个具体的问题。我只是需要一些建议我该怎么做

在文件中给定以下名称,author.list:


KOVACS PETER
Kiss Roland
Nagy jolan
Lisztes Tibor
Feher aNDRas
Korma Maria
Akarki Jack
编写一个AWK程序,可以从文件中读取名称,并将其打印到输出文件中三列格式的html表格中,output.html。表格的呈现方式如下:

    Kovacs Peter     Lisztes Tibor    Akarki Jack
    Kiss Roland      Feher Andras
    Nagy Jolan       Korma Maria
执行示例:


确保output.html是一个有效的html文件。

如果没有看到要生成的html,这只是猜测,但这可能是您想要的:

$ cat tst.awk
BEGIN {
    print "<html>"
    print "  <table>"
}
{
    for (i=1; i<=NF; i++) {
        $i = toupper(substr($i,1,1)) tolower(substr($i,2))
    }
    if ( (NR%3) == 1 ) {
        if (NR>1) print "      </tr>"
        print "      <tr>"
    }
    printf "        <td>%s</td>\n", $0
}
END {
    for (i=NR+1; (i%3) != 1; i++) {
        printf "        <td>%s</td>\n", ""
    }
    print "      </tr>"

    print "  </table>"
    print "</html>"
}
$cat tst.awk
开始{
打印“”
打印“”
}
{
对于(i=1;i1)打印“”
打印“”
}
printf“%s\n”,$0
}
结束{
对于(i=NR+1;(i%3)!=1;i++){
printf“%s\n”
}
打印“”
打印“”
打印“”
}

$awk-f tst.awk author.list
科瓦奇·彼得
亲吻罗兰
纳吉·乔兰
李斯特提博
费希尔·安德拉斯
科尔玛·玛丽亚
阿卡基杰克

对于名称开头不只有1个大写字母的名称,例如
McDonald
O'Hara
Billy Bob
,名称大写/小写转换将失败。如果您必须处理这个问题,那么您需要提供一个算法。

到目前为止您尝试了什么?谁认为这是学习AWK的好练习?@Cerberus,编辑你的问题。然后根据您在评论中收到的反馈进行操作。您说
表应该这样呈现
,但我们不关心这一点,我们关心的是帮助您生成HTML,使表呈现这样。因此,您的问题是显示您希望awk脚本输出的HTML,因为这是您(希望!)真正要求我们提供帮助的内容。请不要通过破坏您的帖子为其他人做更多工作。通过在Stack Exchange(SE)网络上发布,您已经在a下授予SE分发内容的不可撤销权利(即,无论您未来的选择如何)。根据SE政策,分发非故意破坏版本。因此,任何故意破坏行为都将恢复原状。请参阅:。如果允许删除,则在帖子下方左侧有一个“删除”按钮,但它仅在浏览器中,而不是移动应用程序中。
$ cat tst.awk
BEGIN {
    print "<html>"
    print "  <table>"
}
{
    for (i=1; i<=NF; i++) {
        $i = toupper(substr($i,1,1)) tolower(substr($i,2))
    }
    if ( (NR%3) == 1 ) {
        if (NR>1) print "      </tr>"
        print "      <tr>"
    }
    printf "        <td>%s</td>\n", $0
}
END {
    for (i=NR+1; (i%3) != 1; i++) {
        printf "        <td>%s</td>\n", ""
    }
    print "      </tr>"

    print "  </table>"
    print "</html>"
}
$ awk -f tst.awk author.list
<html>
  <table>
      <tr>
        <td>Kovacs Peter</td>
        <td>Kiss Roland</td>
        <td>Nagy Jolan</td>
      </tr>
      <tr>
        <td>Lisztes Tibor</td>
        <td>Feher Andras</td>
        <td>Korma Maria</td>
      </tr>
      <tr>
        <td>Akarki Jack</td>
        <td></td>
        <td></td>
      </tr>
  </table>
</html>