数値の右揃え(recfmt出力)

数値の右揃え(recfmt出力)

私はプレーンテキスト形式のUnixデータベースを作成するためにGNU Recutilsを使用しています。次のスクリプトを使用すると、選択したカテゴリの書籍のリストを取得できます。

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}})

ドキュメントによると、ファイルの正しい並べ替えを定義することは不可能なようです。手動

printfだから私は各行に対して、awkまたはxargsbucleを使ってUnixソリューションを見つけようとしました。for私はこれを達成する方法がわからない。

希望の出力:

  1: Book title
  2: Book title
 55: Book title
128: Book title

答え1

あなたのため:

文書: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

答え2

IDに何桁の数字があるか、タイトルにどの文字(含まれている)が表示されるかに関係なく、すべての:Unixシステムのすべてのシェルでawkを使用する2段階の方法:

$ 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

関連情報