Bash
將數值右對齊(recfmt 輸出)
我正在使用 GNU Recutils 以純文字格式創建 Unix 數據庫。使用以下腳本,我得到一個選定類別的書籍列表:
recsel -t book -e "Category='$1'" "$RECFILE" | recfmt -f bycat.templ
輸出如下:
1: Book title 2: Book title 55: Book title 128: Book title
該文件
bycat.templ
具有以下內容:{{Id}}: {{Title}} (read: {{Read}})
根據手冊,似乎無法從該文件中定義到右側的對齊方式。
所以我試圖找到一個 Unix 解決方案,可能使用
printf
,awk
,xargs
或者for
每行都有一個 bucle。我不知道如何實現這一點。所需的輸出:
1: Book title 2: Book title 55: Book title 128: Book title
給你:
文件:
book.awk
BEGIN { FS = ":" } { id = $1 $1 = "" sub(/^ +/, "", $0) printf("%3d: %s\n", id, $0) }
執行:
recsel ... | recfmt ... | awk -f book.awk
輸出:
1: Book title 2: Book title 55: Book title 128: Book title
在每個 Unix 機器上的任何 shell 中使用任何 awk 的 2-pass 方法,無論 ID 中的數字有多少,也無論標題中可以出現哪些字元(包括
:
):$ cat tst.awk { id = title = $0 sub(/ *:.*/,"",id) sub(/[^:]*: */,"",title) } NR==FNR { wid = length(id) maxWid = (maxWid > wid ? maxWid : wid) next } { printf "%*s: %s\n", maxWid, id, title }
$ awk -f tst.awk file file 1: Book title 2: Book title 55: Book title 128: Book title