ファイルの値を計算する方法

ファイルの値を計算する方法

与えられた値を計算する方法:最初の列にはContig値が含まれています。

Contig
c_000000000002
c_000000000002
c_000000000002
c_000000000002
c_000000000003
c_000000000003
c_000000000003
c_000000000003
c_000000000008
c_000000000008
c_000000000013
c_000000000013

列の値を計算し、コンティグに対応する値を見つけたいです。 「Contig」と「Count_of_Contig」はタブで区切る必要があります。

Contig Count_of_contig
c_000000000002 2_1
c_000000000002 2_2
c_000000000002 2_3
c_000000000002 2_4
c_000000000003 3_1
c_000000000003 3_2
c_000000000003 3_3
c_000000000003 3_4
c_000000000008 8_1
c_000000000008 8_2
c_000000000013 13_1
c_000000000013 13_2

これに対して1行のLinuxコマンドを要求したいと思います。ヘッダーが出力に存在する必要はありません。出力を理解しやすくするためにここに表示されます。

答え1

使いやすいawk

awk -F _ -v OFS='\t' '
  NR == 1 {print $0, "Count_of_contig"; next}
  {print $0, 0+$2 "_" ++count[$0]}' < input_file

答え2

これが私が考える最良の使い方ですミラー

$ mlr --pprint put '
    @n[$Contig] += 1; 
    $Count_of_contig = sub($Contig,"c_0*(.*)","\1_" . @n[$Contig])
  ' input
Contig         Count_of_contig
c_000000000002 2_1
c_000000000002 2_2
c_000000000002 2_3
c_000000000002 2_4
c_000000000003 3_1
c_000000000003 3_2
c_000000000003 3_3
c_000000000003 3_4
c_000000000008 8_1
c_000000000008 8_2
c_000000000013 13_1
c_000000000013 13_2

これはいくつかの理由で残念です。

  1. 持ついいえ++または -、マップされた値を増やすために別のステートメントを強制する

  2. あなたがこの分野splitaを試しているなら、splitax$Contig000000000013少数8進整数ではない。したがって、醜い正規表現ですsub

代わりにstep、動詞を使用して各カテゴリの計算を実行できます。

$ mlr --pprint step -a counter -f Contig -g Contig then put '
    $Contig_counter = sub($Contig,"c_0*([0-9]+)","\1_" . $Contig_counter)
  ' then rename Contig_counter,Count_of_contig input
Contig         Count_of_contig
c_000000000002 2_1
c_000000000002 2_2
c_000000000002 2_3
c_000000000002 2_4
c_000000000003 3_1
c_000000000003 3_2
c_000000000003 3_3
c_000000000003 3_4
c_000000000008 8_1
c_000000000008 8_2
c_000000000013 13_1
c_000000000013 13_2

値の前にプレフィックスを付ける必要がない場合は、次の方法が好ましい場合があります。

$ mlr --pprint step -a counter -f Contig -g Contig input
Contig         Contig_counter
c_000000000002 1
c_000000000002 2
c_000000000002 3
c_000000000002 4
c_000000000003 1
c_000000000003 2
c_000000000003 3
c_000000000003 4
c_000000000008 1
c_000000000008 2
c_000000000013 1
c_000000000013 2

関連情報