15개의 열과 많은 행이 있는 다음과 같은 형식의 소스 파일이 있습니다.
23.5 31.5 5.00 255 0 255 2 1 sal unknown sa time sps meter ms
25.5 32.5 6.00 0 255 0 2 2 sal unknown sa time sps meter ms
다음 awk 명령을 사용하여 원하는 형식으로 변환했습니다.
awk '{printf " %-12s %-13s %-8s%3s %3s %3s %2s %-2s %-47s %-20s %-5s %-11s %-39s %-19s %-6s \n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15 }' source.fault_data > target_fmt.dat
15개 열 사이를 변환하거나 채우는 짧은 명령이 있나요?
필수 형식:
Col. No. Col. should be between these positions
1 1 12
2 13 24
3 25 36
4 37 39
5 41 43
6 45 47
7 49 50
8 51 52
9 53 102
10 103 122
11 123 127
12 128 139
13 140 179
14 180 199
15 200 205
답변1
글쎄요, 당신이 원하는 것은 다음과 같습니다.
- 각 열을 설명하는 3줄(번호, 시작 위치, 끝 위치)이 포함된 파일이 있습니다.
- 그런 다음 해당 형식을 사용하여 다른 파일의 내용을 표시합니다.
이것은 첫 번째 시도입니다. 나는 다음을 가정하고 있습니다.
- 표시된 대로
formattingfile
다음과 같이 잘 정의되어 있습니다.- 열의 수가 증가하고,
- 대령은 순서대로 설명되지 않았고, 아무것도 남지 않았습니다.
- 첫 번째 "제목" 행이 있음)
- 그리고
filetodisplay
헤더라인이 없습니다.
다음은 이를 시도하는 awk 프로그램입니다:
awk ' BEGIN {lastendcol=0;}
( NR == FNR) && ( FNR == 1 ) { next ;}
( NR == FNR) { formatstring=formatstring "%-"($3-lastendcol)"s" ;
lastendcol=$3;
next ;}
{ printf formatstring"\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15 ;}
' formattingfile filetodisplay
첫 번째 패스(NR==FNR)는 첫 번째 줄(헤더)을 무시하고 "formattingfile"을 읽고 "formatstring" 형식 지정 변수를 만듭니다.
두 번째 단계(NR>FNR)에서는 "formatstring\n"을 사용하여 "filetodisplay"의 각 줄을 표시합니다.
물론 여기에 있는 두 파일은 다음과 같습니다.
"표시할 파일" 파일:
23.5 31.5 5.00 255 0 255 2 1 sal unknown sa time sps meter ms
25.5 32.5 6.00 0 255 0 2 2 sal unknown sa time sps meter ms
etc ....
파일 "형식 파일":
Col. No. Col. should be between these positions
1 1 12
2 13 24
3 25 36
4 37 39
5 41 43
6 45 47
7 49 50
8 51 52
9 53 102
10 103 122
11 123 127
12 128 139
13 140 179
14 180 199
15 200 205