awk 또는 sed 명령은 원하는 위치 또는 바이트 위치에서 파일의 각 열을 시작합니다.

awk 또는 sed 명령은 원하는 위치 또는 바이트 위치에서 파일의 각 열을 시작합니다.

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

관련 정보