異なる列の連続セルが同じ場合は、シェルスクリプトを使用して列の単語数を計算する方法!

異なる列の連続セルが同じ場合は、シェルスクリプトを使用して列の単語数を計算する方法!

2列、3列、1列の連続セルが等しい場合、9列のC_R合計数を計算しようとします。S_Rファイルはベッド形式(タブ区切り形式)です。元のファイルは大きく、最初の列は染色体番号を定義します。ファイルの最初の数行は次のとおりです。

chr1    10200   10300   8   10000   10214   100 214 S_R
chr1    10200   10300   8   10009   10233   100 224 S_R
chr1    10200   10300   8   10014   10220   100 206 S_R
chr1    10200   10300   8   10045   10215   100 170 S_R
chr1    10200   10300   8   10068   10209   100 141 S_R
chr1    10200   10300   8   10074   10300   100 226 C_R
chr1    10200   10300   8   10182   10283   100 101 S_R
chr1    10200   10300   8   10182   10387   100 205 C_R
chr1    10300   10400   4   10182   10387   100 205 S_R
chr1    10300   10400   4   10331   10467   100 136 S_R
chr1    10300   10400   4   10346   10461   100 115 S_R
chr1    10300   10400   4   10352   10468   100 116 S_R
chr1    10400   10500   3   10331   10467   100 136 S_R
chr1    10400   10500   3   10346   10461   100 115 S_R
chr1    10400   10500   3   10352   10468   100 116 S_R
chr1    11000   11100   2   11024   11163   100 139 S_R
chr1    11000   11100   2   11024   11188   100 164 S_R
chr1    11100   11200   3   11024   11163   100 139 S_R
chr1    11100   11200   3   11024   11188   100 164 S_R
chr1    11100   11200   3   11127   11296   100 169 S_R
chr1    11200   11300   1   11127   11296   100 169 S_R
chr1    11400   11500   2   11412   11561   100 149 S_R
chr1    11400   11500   2   11457   11608   100 151 S_R
chr1    11500   11600   3   11412   11561   100 149 S_R
chr1    11500   11600   3   11457   11608   100 151 C_R
chr1    11500   11600   3   11574   11744   100 170 S_R
chr1    11600   11700   3   11457   11608   100 151 S_R
chr1    11600   11700   3   11574   11744   100 170 C_R
chr1    11600   11700   3   11640   11815   100 175 S_R
chr1    11700   11800   4   11574   11744   100 170 S_R
chr1    11700   11800   4   11640   11815   100 175 C_R
chr1    11700   11800   4   11784   11963   100 179 S_R
chr1    11700   11800   4   11791   11936   100 145 S_R

上記の表の最初の8行で、列1、2、3が同じであるため、一時出力ファイルは次のようになります。

chr1    10200   10300   2   6
chr1    10300   10400   0   4
chr1    10400   10500   0   3
chr1    11000   11100   0   2
chr1    11100   11200   0   3
chr1    11200   11300   0   1
chr1    11400   11500   0   2
chr1    11500   11600   1   2
chr1    11600   11700   1   2
chr1    11700   11800   1   3

出力ファイルでは、列4C_Rと5は次のようになります。S_R

ベストアンサー1

awkこれは次の方法で行うことができます。

awk 'function report() {
       if (n) print last_key, 0+count["C_R"], 0+count["S_R"]
     }
     {key = $1 OFS $2 OFS $3}
     key != last_key {report(); n = 0; split("", count); last_key = key}
     {count[$9]++; n++}
     END {report()}' <your-file

-F '\t' -v OFS='\t'入力フィールドがタブで区切られている場合は、入力ファイルと出力ファイルの区切り文字を追加して指定する必要があります。デフォルトFSでは、入力フィールド区切り文字(によって設定されます-F)は特別な意味を持つ空白文字です。フィールドを区切る空白のシーケンスと、先頭と末尾の空白が削除されるか、IOW フィールドが空白ではない文字のシーケンスです。したがって、空のフィールドは存在できず、OFS空白でもあります。これは、単に出力のフィールドがスペースで区切られていることを意味します。

おすすめ記事