【问题标题】:Awk - How to change format of the last field and keep the format same for other fieldsawk - 如何更改最后一个字段的格式并保持其他字段的格式相同
【发布时间】:2022-01-11 07:04:14
【问题描述】:
data="blue yellow red white foo.bar.com,foo.bar.eu" 

echo $data | awk '{printf "%-10s %-10s\n", $1, $5}'

给我以下输出:

blue foo.bar.com,foo.bar.eu

我希望输出如下所示,方法是将最后一个字段中的逗号替换为换行符,并如下所示对齐最后一个字段。

blue foo.bar.com

foo.bar.eu

【问题讨论】:

  • 第五个字段可以包含多个逗号吗?
  • 是的。第五个字段可以有多个以逗号分隔的 URL。

标签: awk


【解决方案1】:

取决于您所说的“对齐”(制表符分隔或视觉表格):

$ echo "$data" | sed 's/ .* /\t/; s/,/\n\t/'
blue    foo.bar.com
        foo.bar.eu

$ echo "$data" | awk -F'[, ]' -v OFS='\t' '{print $1, $5 ORS "", $6}'
blue    foo.bar.com
        foo.bar.eu

$ echo "$data" | sed 's/ .* /\t/; s/,/\n\t/' | column -s$'\t' -t
blue  foo.bar.com
      foo.bar.eu

$ echo "$data" | awk -F'[, ]' -v OFS='\t' '{print $1, $5 ORS "", $6}' | column -s$'\t' -t
blue  foo.bar.com
      foo.bar.eu

【讨论】:

    【解决方案2】:

    使用sed

    $ sed 's/\([^ ]*\).* \([a-z]*\.[a-z]*\.[a-z]*\),\(.*\)/\1\t\2\n\t\3/' input_file
    blue    foo.bar.com
            foo.bar.eu
    

    【讨论】:

      【解决方案3】:

      我只想在字段分隔符中添加逗号:

      echo "blue yellow red white foo.bar.com,foo.bar.eu" |
      awk -F '[[:blank:],]+' '{printf ("%-10s %s\n%-10s %s\n", $1, $5, "", $6)}'
      
      # gives
      blue       foo.bar.com
                 foo.bar.eu
      
      • %-10s 意味着使这个字符串至少有 10 个字符宽,必要时用空格填充。 - 表示将字符串对齐到填充空间的左侧(而不是右侧)。
      • 您不应该这样做 %-10s\n - 这会在新行之前创建填充。
      • 要将第二行与第一行相同,可以使用空字符串。

      【讨论】:

        【解决方案4】:

        这可能是你想要的:

        echo "blue yellow red white foo.bar.com,foo.bar.eu,foo.baz.com" |
        awk '{
            n=split($5, a, ",")
            printf "%-10s %-10s\n", $1, a[1]
            for (i=2; i<=n; ++i) printf "%10s %-10s\n", "", a[i];
        }'
        

        输出:

        blue       foo.bar.com
                   foo.bar.eu
                   foo.baz.com
        

        【讨论】:

          猜你喜欢
          • 2021-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多