コンピューティングオブジェクトのリスト

コンピューティングオブジェクトのリスト

同じ名前の型を持つオブジェクトのリストがあります(*_region_NNN ここでは*変数名を表し、NNN数字です)。同じリストを同じ順序でインポートする必要がありますが、名前の数字部分を序数で変更する必要があります。オブジェクトはアルファベット順にソートされます。同じ名前(*)を持つすべてのオブジェクトは、001から順に番号付けする必要があります。

リスト.txt:

BIRC2_region_087
BIRC2_region_089
BIRC2_region_114
BMI1_region_193
BMI1_region_243
CRBN_region_109
CRBN_region_134
CRBN_region_145
CDC20_region_001
CDC20_region_002
CDC20_region_004
CBL_region_002
CBL_region_003
CBL_region_004
CBL_region_005
CBL_region_006
CBL_region_008
CBL_region_009
CBL_region_024
CBL_region_033
CBL_region_042
CBL_region_048
CBL_region_075
CBL_region_076
CBL_region_086
CBL_region_111
CBL_region_112
CBL_region_146
CBL_region_172
CBL_region_248
CBL_region_252

出力.txt

BIRC2_region_001
BIRC2_region_002
BIRC2_region_003
BMI1_region_001
BMI1_region_002
CRBN_region_001
CRBN_region_002
CRBN_region_003
CDC20_region_001
CDC20_region_002
CDC20_region_003
CBL_region_001
CBL_region_002
CBL_region_003
CBL_region_004
CBL_region_005
CBL_region_006
CBL_region_007
CBL_region_008
CBL_region_009
CBL_region_010
CBL_region_011
CBL_region_012
CBL_region_013
CBL_region_014
CBL_region_015
CBL_region_016
CBL_region_017
CBL_region_018
CBL_region_019
CBL_region_020

誰でも私を助けることができますか?

ベストアンサー1

これを使用すると、awk入力データの全体/一部をメモリにバッファリングする必要はありません(突然のデータがすでにソートされているため)。

awk -F'_[^_]*$' 'pre!=$1{ id=0 }
{ pre=$1; printf("%s_%03d\n", $1, ++id) }' infile

_[^_]*$私たちが最終的に定義したもの_<zero-or-more-of-any-characters-but-not-underscore><end-of-line>フィールド区切り文字として。

[^_]ある意味一つ下線以外の文字(改行を含む)は、<行末>の基準点である[^_]*<0個以上の文字がありますが、下線ではない>を意味します。$

行の残りの部分(からアクセス可能$1)が前の行と異なる場合は、IDの数を0にリセットし、そうでない場合は、$10を3つ追加してIDを印刷して増やします。


動的ゼロパディング制御:

<infile awk -F'_[^_]*$' '{ print $1 }' \
|sort |uniq -c |sort -r \
|awk 'NR==1{ z=length($1) } { for(i=1; i<=$1; i++) printf("%s_%0*d\n", $2, z, i) }'

おすすめ記事