AWK如果在for循环中

时间:2015-09-11 16:20:46

标签: bash awk

我使用单线程awk来格式化html中的文件

(awk -v var="$tLen" 'BEGIN {OFS="\t"; } { for(i=1;i<=NF;i++) print "<td align=center ROWSPAN=" var ">" $i"</td>"; } END {}' $part1file ) >> "$output"

输出:

<td align=center ROWSPAN=4>921</td>
<td align=center ROWSPAN=4>0</td>
<td align=center ROWSPAN=4>29128</td>
<td align=center ROWSPAN=4>0</td>
<td align=center ROWSPAN=4>4f9ea...b6c4a</td>
<td align=center ROWSPAN=4>11/09/2015_13:09:44</td>
<td align=center ROWSPAN=4>1</td>
<td align=center ROWSPAN=4>0</td>
<td align=center ROWSPAN=4>20</td>
<td align=center ROWSPAN=4>4</td>

我需要回复:

<td align=center ROWSPAN=4>921</td>
<td align=center ROWSPAN=4>0</td>
<td align=center ROWSPAN=4>29128</td>
<td align=center ROWSPAN=4>0</td>
<td align=center ROWSPAN=4>4f9ea...b6c4a<br/>11/09/2015_13:09:44</td>
<td align=center ROWSPAN=4>1</td>
<td align=center ROWSPAN=4>0</td>
<td align=center ROWSPAN=4>20</td>
<td align=center ROWSPAN=4>4</td>

仅在第5行的末尾而不是关闭标记,插入一个
然后下一行数据,然后用

关闭

我尝试过像

这样的东西
(awk -v var="$tLen" 'BEGIN {OFS="\t"; } { for(i=1;i<=NF;i++) if (i==6)  print "<br/>"; else print "<td align=center ROWSPAN=" var ">" $i"; if (i==5) print ""; else  print "</td>";  } END {}' $part1file ) >> "$output"

但它不起作用。如果条件在awk内部工作,我会寻求帮助,以便对此有所了解。

2 个答案:

答案 0 :(得分:1)

尝试在for的正文周围添加大括号。

awk -v var="$tLen" \
   'BEGIN { OFS = "\t"; }
    {   for (i = 1; i <= NF; i++)
        {
            if (i == 6) print "<br/>"; else print "<td align=center ROWSPAN=" var ">" $i";
            if (i == 5) print ""; else print "</td>";
        }
    }
   ' $part1file >> "$output"

答案 1 :(得分:1)

另一个awk

public EntityListSchema(T klass, int startAt) {
        int nextInt = startAt + Constant.API_MAX_RESULTS;
        this.next = "/" 
            + Constant.API_URL + "/"
            + klass.getEndpoint() + "?" // <-- This is the problem
            + Constant.API_CURSOR + "=" + nextInt;
}

以给定格式打印值,这是按顺序排列的字段,除了5,它是5和6的组合。

我不确定为什么你需要变量var或OFS作为标签。