【问题标题】:AWK if inside for loop如果在 for 循环中,则 AWK
【发布时间】:2015-09-11 16:20:46
【问题描述】:

我正在使用单行 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 中工作的条件,我会寻求帮助来实现这一点,任何关于这方面的信息将不胜感激。

【问题讨论】:

  • 您能否也显示您的示例输入数据。
  • 那“行不通”呢? (我的意思是它不会得到你想要的输出,但它应该“工作”,因为它对字段 6 做了一些不同的事情。)它不会做你想要的,因为你已经有 在您到达字段 6 时输出字段 5 的尾随 &lt;/td&gt;(这应该是您的提示)。
  • 为什么要使用子shell?在问题中显示的上下文中似乎没有必要。

标签: bash awk


【解决方案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"

【讨论】:

  • 你能说明你的意思吗?可能超过几行;当行变得太长时,单行是一个耻辱术语,就像在这种情况下一样。
【解决方案2】:

另一个 awk

 awk '{for(i=1;i<=NF;i++) {
          v=$i;
          if(i==5){
             v=$5"<br/>"$6;i++
          } 
          print "<td align=center ROWSPAN=4>" v "</td>"
       }
      }'

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

我不确定为什么需要将变量 var 或 OFS 设为制表符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2015-06-16
    • 2020-12-29
    相关资源
    最近更新 更多