Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中使用grep和单词计数添加标题_Bash_Grep_Wc - Fatal编程技术网

在bash中使用grep和单词计数添加标题

在bash中使用grep和单词计数添加标题,bash,grep,wc,Bash,Grep,Wc,大家好,我有很多(大约200个)像这样的文件 >Sample_NameA ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT ACGTGTCTAGTATGCATG

大家好,我有很多(大约200个)像这样的文件

>Sample_NameA
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
>Sample_NameB
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
我需要在每个包含样本数、字母数(a、C、G、T)和数字1的文件上添加一个标题

例如,第一个文件应该如下所示:

2 441 1
>Sample_NameA
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
>Sample_NameB
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
我曾考虑使用第一个grep“>”来计算样本数,因为每个样本名称前面都有一个grep“>,并使用wc来计算字符数,直到另一个>,但我无法管理它。过一会儿,我会上传我的脚本和我到目前为止所拥有的,但如果有人解决了它,我会非常感激


感谢id advance。

此awk可以在一个命令中完成所有这一切:

awk '{if (d) d=d RS $0; else d=$0}
      />/{s++;next}
      s==1 && /[ACGT]/{gsub(/[^ACGT]+/, ""); n+=length($0)}
      END{print s, n, "1" RS d}' file
2 441 1
>Sample_NameA
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
>Sample_NameB
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT
ACGTGTCTAGTATGCATGCATAGCTACGACTACGACTAGCATCAGCATCGACTAGCATCGACT

我想不出一个方法来实现这一点,但是用几根管子就可以了

e、 g


完全归功于@anubhava,这里有一种方法不会将整个文件保存在内存中:

ed file <<END
1i
$(awk '/^>/ {s++; next} s==1 {l+=length()} END {print s,l,1}' file)
.
w
q
END

ed文件上传?你的脚本应该是你问题的一部分。为什么第二个数字是441而不是756?嗨@anubhava:我用了它,但第二个值,ACG和Ts的数字不是我期望的。是的,我不清楚这部分。如何计算呢?你能澄清一下吗?441只是第一个样本的计数。我想你想从所有样本中计算总数,这是正确的假设吗?在下一行的每个样本名称之后,我需要计算As、Cs、Gs和Ts的数量。每个样本都有相同数量的As、Cs、Gs和Ts,因此无需查看整个文件,只需查看第一个样本的As、Cs、Gs和Ts。是的,441来自第一个样本,但所有样本都有相同数量的As、Cs、Gs和Ts。修复:
grep-o“[ACGT]”
> grep -E "^>" file 
2
> grep -E -v "^>" file | grep -o "[ACGT]" | wc -l
756
ed file <<END
1i
$(awk '/^>/ {s++; next} s==1 {l+=length()} END {print s,l,1}' file)
.
w
q
END