data.txt
2つの列と80,667行を含むというテキストファイルがあります。最初の20行はすべての行を表します。
Column A Column B
ACKR1/CCRL2 12.66
ACKR1/CMKLR1 10.41
ACKR1/CXCR4 13.01
ACKR1/FZD5 10.72
ACKR1/GPR107 10.22
ACKR1/GPR137 10.73
ACKR1/GPR146 11.93
ACKR1/TAPT1 11.24
ACKR1/TPRA1 11.81
ACKR1/XPR1 10.01
ACKR2/ACKR3 9.36
ACKR2/ACKR3 10.48
ACKR2/ACKR3 11.08
ACKR2/ACKR3 11.11
ACKR2/ACKR3 11.38
ACKR2/ACKR3 11.73
ACKR2/ACKR3 12.97
ACKR2/ADGRA2 8.68
ACKR2/ADGRA2 9.03
ACKR2/ADGRA2 9.34
ご覧のとおり、列Aに重複した値があります(例:ACKR2 / ACKR3、ACKR2 / ADGRA2)。私が望むのは、results.txt
固有値の平均、標準偏差、および標準エラーとその場所を含む他のファイルを作成することですdata.txt
。
Value Avg Stdev StdErr Count
ACKR1/CCRL2 12.66 - - 1
ACKR1/CMKLR1 10.41 - - 1
ACKR1/CXCR4 13.01 - - 1
ACKR1/FZD5 10.72 - - 1
ACKR1/GPR107 10.22 - - 1
ACKR1/GPR137 10.73 - - 1
ACKR1/GPR146 11.93 - - 1
ACKR1/TAPT1 11.24 - - 1
ACKR1/TPRA1 11.81 - - 1
ACKR1/XPR1 10.01 - - 1
ACKR2/ACKR3 11.46 0.84 0.35 7
ACKR2/ADGRA2 8.69 0.33 0.19 3
標準偏差と標準誤差は段階別にうまくいきませんが、一つぐらいは得ればいいようです。
私は生物学者なので、UNIXスクリプトを書くのはうまくいきません。どこから始めるべきかわかりません。助けてくれてありがとう。以前に同様の質問に対する回答があった場合は申し訳ありません。検索しましたが、何も見つかりませんでした。
とても感謝しています!
ベストアンサー1
StdevとSterrの計算は不明です。ただし、この方法では簡単に計算できます。
$ awk '{A[$1]++;B[$1]+=$2}END{print "Value\t\tAvg\tCount";for (i in A){print i"\t"B[i]/A[i]"\t"A[i]}}' input.txt
Value Avg Count
ACKR2/ADGRA2 9.01667 3
ACKR1/GPR107 10.22 1
ACKR1/XPR1 10.01 1
ACKR1/CMKLR1 10.41 1
ACKR1/CCRL2 12.66 1
ACKR1/GPR146 11.93 1
ACKR1/GPR137 10.73 1
ACKR1/CXCR4 13.01 1
ACKR2/ACKR3 11.1586 7
ACKR1/TPRA1 11.81 1
ACKR1/FZD5 10.72 1
ACKR1/TAPT1 11.24 1
awk '{
A[$1]++;B[$1]+=$2
}
END
{
print "Value\t\tAvg\tCount";
for (i in A)
{
print i"\t"B[i]/A[i]"\t"A[i]
}
}' input.txt