sed를 사용하여 문자열 형식 지정

sed를 사용하여 문자열 형식 지정

sed를 사용하여 다음 입력 문자열을 출력 문자열로 형식화하려면 어떻게 해야 합니까?

가운데 문자열은 20번째 문자에서 시작해야 하고 끝 문자열은 40번째 문자에서 시작해야 합니다.

입력하다:

begining center end     
beg12  cen12  end12
beg13 cen  end

산출:

begining     center      end     
beg12        cen12       end12
beg13        cen         end

답변1

awk해당 기능을 사용하여 이 데이터의 형식을 지정할 수 있습니다 printf().

$ awk '{ printf("%-20s%-20s%s\n", $1, $2, $3) }' data.in
begining            center              end
beg12               cen12               end12
beg13               cen                 end

이는 파일의 데이터가 공백으로 구분되어 있다고 가정합니다.

열 너비를 매개변수로 지정합니다.

$ cols=40
$ awk -v c="$cols" 'BEGIN { fmt=sprintf("%%-%ds%%-%ds%%s\n", c, c) } { printf(fmt, $1, $2, $3) }' data.in
begining                                center                                  end
beg12                                   cen12                                   end12
beg13                                   cen                                     end

답변2

이것은 sed제가 사용하지 않을 경우 중 하나입니다. printf특히 "필드"가 최소 문자
%-Ns수를 차지할 때까지 문자열을 공백으로 채우는 형식을 사용하겠습니다.N

#!/usr/bin/env bash

while read first second third
do
    printf "%-20s%-20s%s\n" "$first" "$second" "$third"
done <<- 'EOF' 
    begining center end     
    beg12  cen12  end12
    beg13 cen  end
EOF

답변3

방법:

awk '{printf("%-20s%-20s%-20s\n",$1,$2,$3)}' file

산출:

begining            center              end                 
beg12               cen12               end12               
beg13               cen                 end 

답변4

< yourfile tr -s '\t ' '\t\t' | expand -t 19,39

결과

         1         2         3         4         5
12345678901234567890123456789012345678901234567890
begining           center              end
beg12              cen12               end12
beg13              cen                 end

피복재

  • 먼저 남은 공백 및/또는 탭 문자를 탭 문자로 압축합니다.
  • 그런 다음 옵션을 사용하고 탭 위치를 나열하여 expand결과에 명령을 적용합니다 .-t

관련 정보