我正在尝试格式化动态数据,但是它不起作用。我可以知道我在想什么。
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
答案 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|