설정된 트랜잭션에 대한 시퀀스 번호를 생성합니다.

설정된 트랜잭션에 대한 시퀀스 번호를 생성합니다.

Record_types이 다른 파일이 있습니다. (아래 예에서 위치 1-2; 1, 2, 1A2A... 3은 Record_types입니다.)

파일 1:

1 xxxx uuuu dfffgg cvbd 
2 jjj oo dhjkkk ooo             
2 9555 schghf kllls                                         
1A chkds tddc ihg  
2A hkkseadc             
1 fdsff kljjgt uoohgf            
1A ghyytd gkddgg tusab sg;dadug tdskd              
1A gdjhjkh hdw ouiy axv kaksh ;ljqskl            
3 gdhd tfyw ;lk;k; joo     
1 gdhsgdhj uyutyu ljkgjg                        
2 hjkhclkshclk jhshcklj  dhkjdh                  
2A hjkdhfsh jj okop oipo        

거래를 설정하기 위해 일련번호를 생성하고 싶습니다. 예를 들어, Record_type 1에서 다음으로 발생하는 Record_type 1로 이동하는 것은 1개의 트랜잭션으로 간주됩니다.

위 파일에서 예를 들어, 1에서 2A까지(라인 5는 1개의 트랜잭션 파일이어야 함) 다음 1에서 3까지(라인 6에서 9까지)는 두 번째 트랜잭션이고, 다음으로 발생하는 1에서 2A는 트랜잭션의 1그룹입니다. .

이에 따라 이 분할을 수행하고 싶습니다. 다음 코드를 사용하여 시퀀스를 생성하고 사용합니다.

awk ' BEGIN {SEQ=0 } {if ( substr($0,1,2) == "1 " ) {SEQ++;} print $0SEQ }' file1 > file2

이제 내 파일 2는 다음과 같습니다. (일련번호는 줄의 마지막 숫자에 추가됩니다.)

1 xxxx uuuu dfffgg cvbd1                                                                                             
2 jjj oo dhjkkk ooo1                                                                                                   
2 9555 schghf kllls1                                                                                                 
1A chkds tddc ihg1                                                                                                     
2A hkkseadc1                                                                                                      
1 fdsff kljjgt uoohgf2                                                                               
1A ghyytd gkddgg tusab sg;dadug tdskd2                                                                    
1A gdjhjkh hdw ouiy axv kaksh ;ljqskl2                                                                            
3 gdhd tfyw ;lk;k; joo2                  
1 gdhsgdhj uyutyu ljkgjg3                  
2 hjkhclkshclk jhshcklj  dhkjdh3                    
2A hjkdhfsh jj okop oipo3  

일련번호는 해당 줄의 마지막 숫자에 추가됩니다. 이로 인해 고정된 위치 길이로 값을 전달할 때 유효성 검사 문제가 발생합니다. 원하는 고정 위치나 줄 끝이 아닌 시작 부분에 시퀀스 번호를 추가하는 방법이 있습니까?

컬렉션 트랜잭션을 그룹화하는 더 좋은 방법이 있습니까?

awk ' BEGIN {SEQ=0 } {if ( substr($0,1,2) == "1 " ) {SEQ++;} print $0SEQ }' file1 > file2

답변1

awk ' BEGIN {SEQ=0 } {if ( substr($0,1,2) == "1 " ) {SEQ++;} printf "%10d%s\n",SEQ,$0 }' file1 > file2

답변2

첫 번째 필드에 1이 표시되면 시퀀스 번호를 늘리십시오. 그런 다음 첫 번째 필드에 다시 1이 표시될 때까지 해당 번호를 레코드 접두어로 계속 사용합니다. 헹구고 반복하십시오.

awk '
$1 == 1 {seq++}
{
  print seq $0
}
' file

산출:

11 xxxx uuuu dfffgg cvbd 
12 jjj oo dhjkkk ooo             
12 9555 schghf kllls                                         
11A chkds tddc ihg  
12A hkkseadc             
21 fdsff kljjgt uoohgf            
21A ghyytd gkddgg tusab sg;dadug tdskd              
21A gdjhjkh hdw ouiy axv kaksh ;ljqskl            
23 gdhd tfyw ;lk;k; joo     
31 gdhsgdhj uyutyu ljkgjg                        
32 hjkhclkshclk jhshcklj  dhkjdh                  
32A hjkdhfsh jj okop oipo

관련 정보