【问题标题】:Format dynamic data using awk使用 awk 格式化动态数据
【发布时间】:2019-11-22 17:58:28
【问题描述】:

我正在尝试格式化动态数据,但它不起作用。我可以知道我错过了什么。

echo "============================================================================================================="
awk 'BEGIN {printf "%-25s %-5s %-20s %-5s %-5s %-20s %-3s %-3s\n", "Vol_Name","Capacity","Pool","Used Capacity","Locked","WWN(LUND ID)","Mirrored","Status"}'
echo "============================================================================================================="

grep -iE $lunid ${XIV_TEMP}/lunid_* | awk '{printf "%-25s %-5s %-20s %-5s %-5s %-20s %-3s %-3s\n", $1, $2, $3, $6, $12, $14, $15, $29}'

输出未按预期对齐。

=============================================================================================================
Vol_Name                  Capacity Pool                 Used Capacity Locked WWN(LUND ID)         Mirrored Status
=============================================================================================================
glbprodssq_cl_1_svm_011   326   XIV_SM1-GBL_PROD_SVM 319   no    01173900AEC601AF     yes no

预期输出:

============================================================================================================================
        Vol_Name         Capacity       Pool            Used Capacity   Locked      WWN(LUND ID)         Mirrored   Status
============================================================================================================================
glbprodssq_cl_1_svm_011    326   XIV_SM1-GBL_PROD_SVM       319           no     01173900AEC601AF          yes      online

【问题讨论】:

    标签: bash shell unix scripting


    【解决方案1】:

    您超出了字符串的字符数。如果指定 '%-5s',这意味着字符串在右侧用空格填充,直到字符串长度为 5 个字符。如果超过该值,它将破坏格式。为了更好地格式化表格,我会查看列命令。

    【讨论】:

      【解决方案2】:

      我发现这个-http://www.grymoire.com/Unix/Awk.html 很有帮助!我发现它试图回答你的问题。

      特别是,

      '最后一个示例在每个字段之前放置空格以确保满足最小字段宽度。如果你想要右边的空间,你会怎么做?在宽度前加一个负号:

      printf("%-10s %-6d\n", $1, $2);
      

      这会将打印字符向左移动,并在右侧添加空格。'

      我也同意另一个答案。

      【讨论】:

        【解决方案3】:

        想想当字段的宽度不正确时你想要什么。
        您可以更改宽度或选择类似的东西

        ;-> printf "|%.5s|\n" 123 12345 1234567
        |123|
        |12345|
        |12345|
        ;-> printf "|%5s|\n" 123 12345 1234567
        |  123|
        |12345|
        |1234567|
        ;-> printf "|%-5s|\n" 123 12345 1234567
        |123  |
        |12345|
        |1234567|
        ;-> printf "|%5.5s|\n" 123 12345 1234567
        |  123|
        |12345|
        |12345|
        ;-> printf "|%-5.5s|\n" 123 12345 1234567
        |123  |
        |12345|
        |12345|
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-22
          • 2020-05-29
          • 2023-03-08
          • 1970-01-01
          • 2011-11-21
          相关资源
          最近更新 更多