我的数据框看起来像这样:
ERR843978.19884 13 51 51
ERR843978.2880 10 49 51
ERR843978.10002 7 48 55
ERR843978.1158 8 45 54
ERR843978.4671 14 62 60
ERR843978.83 15 56 70
ERR843978.9406 8 56 39
ERR843978.8383 12 59 43
ERR843978.8916 6 51 42
Run Code Online (Sandbox Code Playgroud)
我希望为所有行做到这一点:
column2/(column3*column4)
Run Code Online (Sandbox Code Playgroud)
然后在新文件中打印输出.
我写了一个bash脚本来做它,但它有点慢,所以我正在寻找一个更有效的解决方案(也许与awk?).
这是我的代码
while read line
do
out0=$(awk '{print $1}' <<< $line)
out1=$(awk '{print $2}' <<< $line)
out2=$(awk '{print $3}' <<< $line)
out3=$(awk '{print $4}' <<< $line)
out4=`echo "scale=5; ($out1 / ($out2 * $out3))"|bc -l`
echo "$out0;$out4"
done < $file
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的fasta文件:
>0011 my.header
CAAGTTTATCCACATAATGCGAATAACCAATAATCCTTTTCATAAGTCTATTCTTCATAATCTAAATCGT
TTTCAAGTACATAATTATCCTTTGCCTGTTCGTTAGTTTTATTAAAATTATACTGATCTTTCTTTTTCAT
CCCACGGGTTAAAATCTTCCTCAATCGGTGGGTTTTCTTCATGAAATTGTTTCATTTATTTGCTGTTTTT
AGTTCTCCGATTGTATAACACTTAGTTGTATTAGTGCCGGGTAGTCTATAATTAGCCTCTTTTATATACC
CACGCTTTAATAATCTGTTTACAGAATTATATAATTTGCTCTTAGACATAAAAGGAATAATTTCTCTAAG
TTTAGAAATCGTAATAAAAACGGTATTAGGTTCTTTCTTTACCCTACATCCCTTAAACTTATCCTTATAT
GTATCAGTACAAAGTATAAGAAACATAACTGAATATACTACTGAATCATCTAAACCGATTTCTTTTGCTA
AATCTTCATTTATAACCATAATTATAACGCTTTTAATTGAATTGACTCTTTAACATTTGATGTTTTAACG
AACTGATCGTATATTTCCGGATATTGTTCTTTCAGTGCTTTAGAATCAAGTGATTCACGGCTATACGCTT
TCTTCCTTGTGACTGAAATAAGTTCCCCTTTTATATTATCAGCTTTCGCCTCAGACATCAGACCTAACAA
CTGTTCTTTGAACTTGCCTAAATGTTCGTCTATCTTCTTTTGCATTTCAAGAAGTTCGTAAACGCCTTCT
TCGATATGTGCAACCTTTGCAGGCAACGACTCCAATTTAGCTACATAACTGTCTTTGCTTGCATTGTCTG
CATATCGAACTCCATTCTTACAGCAATTAAGGAATAATTCTATTTCGCTGTCCGGTATGCGTTCAACAGA
GAAAATTCCGTCCTTATCCTTGTCACCTCTTAGCCAAATTGCGATAAGTCCCTCTACTTTCAAATTTGGG
TTTTGTCTCTCGAAAAGATAGGCGTATATTGATAGCTGCCAAGACAAATAAAGCAAATCAAGTTTGTAGG
TAGTTTTAATGTCACCTAAAACGACTGATTTATCAGAGCTGCCCAAATATACTTTATCGGTCGGTGATGC
GATAAGCTCGTTATCAGTTAGAATATACTCAGATGCGATATGAATTAAACCGCTTCCGGCTTTTAAATTC
AAATAGTTCTCTCCGTAGACCGTTTCCGGTTCAATACCTTCTTTGTCGATCCTCTCAACTTCATCATGAA
CCGCTTTCCCTCTCTCAGTTGCCGATCTCAAAATATTATCCGGTATATTGTCAAGTTTGCCTGGAAATAA
Run Code Online (Sandbox Code Playgroud)
我想要序列的长度(没有标题).我试过这个:
tail -n +2 my.file | wc -c
Run Code Online (Sandbox Code Playgroud)
这给了我这个输出:
1349
Run Code Online (Sandbox Code Playgroud)
这是错的,实际大小是1330.
我不确定发生了什么.我想可能有一些隐藏的角色,但我不知道如何探索这个.
这是我的输入文件:
1.37987
1.21448
0.624999
1.28966
1.77084
1.088
1.41667
Run Code Online (Sandbox Code Playgroud)
我想创建我选择的大小的垃圾箱以获得类似直方图的输出,例如对于 0.1 个垃圾箱,从 0 开始:
0 0.1 0
...
0.5 0.6 0
0.6 0.7 1
...
1.0 1.1 1
1.1 1.2 0
1.2 1.3 2
1.3 1.4 1
...
Run Code Online (Sandbox Code Playgroud)
我的文件对于 R 来说太大了,所以我正在寻找 awk 解决方案(也对我能理解的其他任何内容开放,因为我仍然是 Linux 初学者)。
这在这篇文章中已经得到了回答:awk histogram in buckets,但该解决方案对我不起作用。