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
空白でもあります。これは、単に出力のフィールドがスペースで区切られていることを意味します。