Awk 명령은 레코드의 일부 데이터를 조정할 때 동일한 레코드 길이를 유지합니다.

Awk 명령은 레코드의 일부 데이터를 조정할 때 동일한 레코드 길이를 유지합니다.

*.txt제목과 예고편이 포함된 파일이 있습니다 . 예고편에는 여러 가지 특정 기록이 포함되어 있습니다. 일부 레코드가 삭제되는 파일 작업을 수행하고 있는데 트레일러 레코드 수를 조정해야 합니다.

이 작업을 수행하는 명령이 있지만 숫자가 더 큰 것에서 더 작은 것으로 또는 그 반대로 조정되면 레코드 길이가 변경됩니다. 다음은 데이터의 예입니다.

HDRFILENAME   SOMETHING SOMETHING        
H ICOCOM   SOME DATA1                    
H ICOCOM   SOME DATA2                    
H ICOCOM   SOME DATA3                    
H ICOCOM   SOME DATA5                    
H ICOCOM   SOME DATA6                    
H ICOCOM   SOME DATA7                    
H ICOCOM   SOME DATA8                    
H ICOCOM   SOME DATA9                    
TLR11                                     

예고편 녹화를 조정해야 하는데 출력은 다음과 같습니다.

1.......10........20........30........40..
HDRFILENAME   SOMETHING SOMETHING        
H ICOCOM   SOME DATA1                    
H ICOCOM   SOME DATA2                    
H ICOCOM   SOME DATA3                    
H ICOCOM   SOME DATA5                    
H ICOCOM   SOME DATA6                    
H ICOCOM   SOME DATA7                    
H ICOCOM   SOME DATA8                    
H ICOCOM   SOME DATA9                    
TLR9                                      

파일 레코드 길이는 42자이며 트레일러 수를 조정한 후에도 변경되지 않고 유지되어야 합니다.

예고편 레코드 수를 변경하려면 다음 명령을 사용합니다.

{awk '/H ICOC/{cnt++} {sub(/TLR[0-9]+/,"TLR"(cnt+0))} 1' file}

동일한 레코드 길이를 유지/유지하는 방법을 알려줄 수 있는 사람이 있나요?

여기에 이미지 설명을 입력하세요.

여기에 이미지 설명을 입력하세요.

$ 고양이 -Ev test_mark.txt

HDRFILENAME   SOMETHING SOMETHING        ^M$
H ICOCOM   SOME DATA1                    ^M$
H ICOCOM   SOME DATA2                    ^M$
H ICOCOM   SOME DATA3                    ^M$
H ICOCOM   SOME DATA4                    ^M$
H ICOCOM   SOME DATA5                    ^M$
H ICOCOM   SOME DATA6                    ^M$
H ICOCOM   SOME DATA7                    ^M$
H ICOCOM   SOME DATA8                    ^M$
H ICOCOM   SOME DATA9                    ^M$
TLR11                                    ^M$
$

$ awk '/H ICOC/{cnt++} /^TLR/{$0=sprintf("%-*s", length(), "TLR"(cnt+0))} 1' test_mark.txt |cat-Ev

HDRFILENAME   SOMETHING SOMETHING        ^M$
H ICOCOM   SOME DATA1                    ^M$
H ICOCOM   SOME DATA2                    ^M$
H ICOCOM   SOME DATA3                    ^M$
H ICOCOM   SOME DATA4                    ^M$
H ICOCOM   SOME DATA5                    ^M$
H ICOCOM   SOME DATA6                    ^M$
H ICOCOM   SOME DATA7                    ^M$
H ICOCOM   SOME DATA8                    ^M$
H ICOCOM   SOME DATA9                    ^M$
TLR9                                      $

답변1

처리 후 입력 "TLR" 라인의 길이가 이전과 동일해지기를 원하는 경우 다음과 같습니다.

awk '/H ICOC/{cnt++} /^TLR/{$0=sprintf("%-*s", length(), "TLR"(cnt+0))} 1'

제공된 최종 솔루션 이제 우리는 DOS 줄 끝이 있고 이를 유지하기를 원한다는 것을 알고 있습니다.

awk -v ORS='\r\n' '{sub(/\r$/,"")} /H ICOC/{cnt++} /^TLR/{$0=sprintf("%-*s", length(), "TLR"(cnt+0))} 1' file

답변2

awk '/H ICOC/{cnt++} /^TLR/ {$0 = sprintf("TLR%-39d", cnt)} 1' file

관련 정보