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