숫자 값을 오른쪽 정렬(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

관련 정보