2

このようなテキストファイルがあります。「A」と「E」の合計文字数を抽出したいと思います。

>pr1
FSVSQNNPAE
>pr2
MAKERAHSQ
>pr3
RRRDKINNWIVQL

このような出力を取得したい

>pr1 
Total number of A - 1 
Total number of E - 1   

>pr2
Total number of A – 2
Total number of E - 1

>pr3
Total number of A – 0
Total number of E – 0

どうすればawkでこれを行うことができますか?

4

2 に答える 2

4

一方通行。で始まる行が見つかったら>、次の行を読み、それを変数に保存して、str各文字の置換数を数えます。

awk '
    $1 ~ /^>/ {
        getline str
        num_a = gsub( /A/, "", str )
        num_e = gsub( /E/, "", str )
        printf "%s\nTotal number of A - %d\nTotal number of E - %d\n\n", $0, num_a, num_e
    }
' infile

出力:

>pr1                                                                                                                                                                                                                                         
Total number of A - 1                                                                                                                                                                                                                        
Total number of E - 1                                                                                                                                                                                                                        

>pr2                                                                                                                                                                                                                                         
Total number of A - 2                                                                                                                                                                                                                        
Total number of E - 1                                                                                                                                                                                                                        

>pr3                                                                                                                                                                                                                                         
Total number of A - 0                                                                                                                                                                                                                        
Total number of E - 0
于 2012-07-17T12:20:51.373 に答える
3

更新:これは、FSフィールドセパレーター)をその場で変更することで機能します:

{
  if ($0 ~ /^>/)
    printf("\n%s\n", $0);
  else
  {
    FS="A"
    nl = $0;
    $0 = nl;
    print "Total number of A - ", NF-1; 

    FS="E"
    $0 = nl;
    print "Total number of E - ", NF-1;
  }
}

与える:

>pr1
Total number of A -  1
Total number of E -  1

>pr2
Total number of A -  2
Total number of E -  1

>pr3
Total number of A -  0
Total number of E -  0

以前の解決策

{
  if ($1 ~ /^>/)
    printf("\n%s\n", $0)
  else
  {
    print "total number of A - ", gsub(/A/,"A")
    print "total number of E - ", gsub(/E/,"E")
  }
}

@Bireiに似ています

于 2012-07-17T12:48:09.250 に答える