小编Eve*_*r69的帖子

bash中的多个/分隔列

我的数据框看起来像这样:

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)

unix bash shell awk dataframe

7
推荐指数
1
解决办法
680
查看次数

序列长度的字数错误

我有一个看起来像这样的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.

我不确定发生了什么.我想可能有一些隐藏的角色,但我不知道如何探索这个.

unix bash awk wc

7
推荐指数
1
解决办法
680
查看次数

使用 awk 类似直方图创建 bin

这是我的输入文件:

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,但该解决方案对我不起作用。

unix bash awk grouping dataframe

1
推荐指数
1
解决办法
6153
查看次数

标签 统计

awk ×3

bash ×3

unix ×3

dataframe ×2

grouping ×1

shell ×1

wc ×1