Record_typesが異なるファイルがあります。 (以下の例では、位置1-2; 1
、、2
など...はRecord_typesです。)1A
2A
3
ファイル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まで)は2番目のトランザクションであり、次に発生する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