【问题标题】:Need help in understanding the code below awk(&&&&) code:在理解 awk(&&&&) 代码下面的代码时需要帮助:
【发布时间】:2014-02-18 10:17:54
【问题描述】:
#!/bin/awk -f
{
 if (length($0) < 80)
 {
      prefix = "";
       for (i = 1;i<(80-length($0))/2;i++)
          prefix = prefix " ";
        print prefix $0;
    }
else
 {
print;
    }
}

谁能告诉我上面代码中前缀变量的作用。

【问题讨论】:

  • 您可以尝试将prefix = prefix " "; 替换为prefix = prefix "|"; 或类似的东西,看看会发生什么。
  • 也许使用{printf "%80s\n", $0} 来获得缩进会更容易。

标签: awk


【解决方案1】:

这是为了使传入的文本成为居中对齐的文本。

  1. 阅读正文
  2. 在变量名前缀中声明一个空字符串
  3. 计算粘贴文本的位置由 for 循环通过为相同的空格添加前缀来确定。在这种情况下,我们打印空格,直到我们位于 ((80 - length of your string ) /2) 的位置
  4. 打印你的字符串

注意:AWK 中的 $0 是您的完整字符串,例如“I want to test this”,其中 $1 将是“I”,$2 将是“want”,在 shell 中它会打印您的您正在使用的当前 shell

【讨论】:

    【解决方案2】:

    如果字符串比行长短,它会添加前填充以使字符串居中,但您可以这样做:

    awk '{ printf "%*s\n",(80+length($0))/2, $0 }'  file
    

    【讨论】:

      【解决方案3】:

      prefix加空格,根据公式创建一个前面有空格的行。

      echo "test" | awk -f script
                                           test
      

      【讨论】:

        【解决方案4】:

        它构建了一个空字符串占位符(用于左填充),其长度=(80-length of the line)/2

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-29
          • 2010-11-04
          • 1970-01-01
          • 1970-01-01
          • 2012-10-16
          相关资源
          最近更新 更多