2016-03-20 21 views
1

我有一個腳本,它遍歷目錄中的每個文本文件,並將內容存儲在變量中。內容可以長達1-50個字符。文本文件的數量是未知的。我想以這樣一種方式打印內容,即每個變量都歸入一個乾淨的列。對多個變量的Bash縮進輸出

for file in $LIBPATH/*.txt; do 
    name=$(awk 'FNR == 1 {print $0}' $file) 
    height=$(awk 'FNR == 2 {print $0}' $file) 
    weight=$(awk 'FNR == 3 {print $0}' $file) 
    echo $name $height $weight 
done 

此代碼產生輸出:

Avril Stewart 99 54 
Sally Kinghorn 170 60 
John Young 195 120 

雖然所希望的輸出是:

Avril Stewart 99 54 
Sally Kinghorn 170 60 
John Young  195 120 

謝謝!

+0

見:我如何打印bash和填充它用空格一定寬度的一些文字(http://stackoverflow.com/q/6345429/3776858) – Cyrus

回答

0

使用printf

printf '%-20s %3s %3s\n' "$name" "$height" "$weight" 

%3s確保所有字段使用三個字符,%-20s確實爲20個字符相同,但在前面的-使輸出左對齊。

如果你想限制輸出爲例如20個字符,你可以使用

printf '%-20.20s %3s %3s\n' "$name" "$height" "$weight" 

這會給你的20個字符的靠左對齊最小寬度和20個字符的最大寬度,換句話說,它可以確保你總是有整整20個字符。

+0

感謝。如果名稱超過20個字符,是否有方法在第20個字符後截斷名稱?我意識到「% - 20」會達到這個目標,但對於少於20個字符的名字,縮進將會丟失。 –

+0

@DaveSmith查看我更新的答案。 – pfnuesel