【问题标题】:Print multiple rows in AWK在 AWK 中打印多行
【发布时间】:2020-09-03 10:07:06
【问题描述】:

我想在 AWK 中打印多行名称。目前,我可以打印 3 行和 3 列都放在 HTML 表中。我想要的是能够根据我的输入项的数量打印不确定的行数,而不必指定要打印的确切行数。

例如,我想在 3 列中打印以下名称,但行数取决于名称的数量。如果名称的数量是 33,那么我将有 3 列和 11 行。帮我做,在 AWK 中。 名称:

Kiss Roland
Nagy jolan
Lisztes Tibor
Feher aNDRas
Korma Maria
Akarki Jack
KOVACS PETER
Kiss Roland
Nagy jolan
Lisztes Tibor
Feher aNDRas
Korma Maria
Akarki Jack
KOVACS PETER
Kiss Roland
Nagy jolan
Lisztes Tibor
Feher aNDRas
Korma Maria
Akarki Jack
KOVACS PETER
Kiss Roland
Nagy jolan
Lisztes Tibor
Feher aNDRas
Korma Maria
Akarki Jack

到目前为止,我有这个 AWK 代码。它根据需要将名称大写并将它们打印在 3 列中。现在我需要行数与当前一样多,而不仅仅是 3 行。代码如下:

BEGIN{
    FS=OFS=" ";
  print "<html>" ORS "<title>" ORS "Hello World" ORS "</title>";
  print "<head>" ORS "<style>" ORS "table, th, td {" ORS "  border: 1px solid black;" ORS "}" ORS "</style>";
  print "</style>" ORS "<body>" ORS "<table>";
}{
    s=tolower($0);
    split (s, letters, " ");
    array[arraylen++] = toupper( substr( letters[1], 1, 1 )  ) substr( letters[1], 2 ) " " toupper( substr( letters[2], 1, 1 )  ) substr( letters[2], 2 );
    up=toupper(substr(s,1,1));
    small=tolower(substr(s,1,1));
    as=sub(/small/, up, s);
}

END {
    columns = 3;
    print "<table>";
    for (rows = 0; rows < columns; rows++) {
        printf "<tr>";
        for (cell = rows; cell <= rows + 2*columns; cell += columns) {
            printf "<td>%s</td> ", array[cell];
        }
        print "</tr>";
    }
    print "</table>";
}

目前,它输出到这个只有 3 行和 3 列的 HTML 文件:我希望你明白我需要行很多,而不仅仅是 3。

<html>
<title>
Hello World
</title>
<head>
<style>
table, th, td {
  border: 1px solid black;
}
</style>
</style>
<body>
<table>
<table>
<tr><td>Kovacs Peter</td> <td>Lisztes Tibor</td> <td>Akarki Jack</td> </tr>
<tr><td>Kiss Roland</td> <td>Feher Andras</td> <td>Kovacs Peter</td> </tr>
<tr><td>Nagy Jolan</td> <td>Korma Maria</td> <td>Kiss Roland</td> </tr>
</table>

【问题讨论】:

    标签: html awk html-table


    【解决方案1】:

    这将创建表格的主体,添加页眉和页脚文本

    pr -3ts$'\t' file | sed 's ^ <tr><td> ;s \t </td><td> g;s $ </td></tr> '
    
    <tr><td>Kiss Roland</td><td>Lisztes Tibor</td><td>Korma Maria</td></tr>
    <tr><td>Nagy jolan</td><td>Feher aNDRas</td><td>Akarki Jack</td></tr>
    <tr><td>Lisztes Tibor</td><td>Korma Maria</td><td>KOVACS PETER</td></tr>
    <tr><td>Feher aNDRas</td><td>Akarki Jack</td><td>Kiss Roland</td></tr>
    <tr><td>Korma Maria</td><td>KOVACS PETER</td><td>Nagy jolan</td></tr>
    <tr><td>Akarki Jack</td><td>Kiss Roland</td><td>Lisztes Tibor</td></tr>
    <tr><td>KOVACS PETER</td><td>Nagy jolan</td><td>Feher aNDRas</td></tr>
    <tr><td>Kiss Roland</td><td>Lisztes Tibor</td><td>Korma Maria</td></tr>
    <tr><td>Nagy jolan</td><td>Feher aNDRas</td><td>Akarki Jack</td></tr>
    

    如果你想先行

    $ pr -3ats$'\t' file | sed 's ^ <tr><td> ;s \t </td><td> g;s $ </td></tr> '
    
    <tr><td>Kiss Roland</td><td>Nagy jolan</td><td>Lisztes Tibor</td></tr>
    <tr><td>Feher aNDRas</td><td>Korma Maria</td><td>Akarki Jack</td></tr>
    <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>KOVACS PETER</td><td>Kiss Roland</td></tr>
    <tr><td>Nagy jolan</td><td>Lisztes Tibor</td><td>Feher aNDRas</td></tr>
    <tr><td>Korma Maria</td><td>Akarki Jack</td><td>KOVACS PETER</td></tr>
    <tr><td>Kiss Roland</td><td>Nagy jolan</td><td>Lisztes Tibor</td></tr>
    <tr><td>Feher aNDRas</td><td>Korma Maria</td><td>Akarki Jack</td></tr>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      相关资源
      最近更新 更多