为设置的事务创建序列号

为设置的事务创建序列号

我有一个具有不同 record_types 的文件。 (下面示例中的位置 1-2;121A、等2A...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 到下一次出现记录类型 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

相关内容