使用awk格式化动态数据

时间:2019-07-13 03:28:52

标签: bash shell unix scripting

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

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

3 个答案:

答案 0 :(得分:0)

您超出了字符串的字符数。如果指定'%-5s',则表示字符串在右边用空格填充,直到字符串长度为5个字符为止。如果超出该范围,则会破坏格式。为了更好地格式化表格,我将看一下column命令。

答案 1 :(得分:0)

我发现这个http://www.grymoire.com/Unix/Awk.html非常有用!我发现它试图回答您的问题。

特别是

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

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

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

我也同意其他答案。

答案 2 :(得分:0)

考虑当字段宽度不正确时想要什么。
您可以更改宽度或选择类似的内容

;-> 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|