我有这样的东西:
grep -v ">" $subfolder/assembly/contigs_1L.fasta | xargs -d \n wc >> $subfolder/N50_analysis/NC_len.txt有了这个,我想从fasta文件中删除标识符,然后我想计算每一行的字符。
xargs做了它应该做的事情,在\n之后拆分,但它不算数。如果我不使用\n,那么所有的东西都只有一大行。
编辑:
输入
>C1
AGATGATGAGGATGAGATTGACTACGATCGATCGATGCATCGATCGGCATCGATCGACTGATCGATCGATCGATCGATCGATCGTACGATCGGCTACGCGCGATCGACGCGCGCGATCGATCGATCGTCGATCGGCGCGCTACGATCG
>C2
AGATGATGAGGATGAGATTGACTACGATCGATCGATGCATCGATCGGCATCGATCGACTGATCGATCGATCGATCGATCGATCGTACGATCGGCTACGCGCGATCGACGCGCGCGATCGATCGATCGTCGATCGGCGCGCTACGATCG我只需要AGCT序列的长度,所以我取(grep)文件中不是以>开头的所有内容。然后我想要独立计算每个序列的长度,所以最后我得到了类似这样的结果:
150
100
.
.
.
Cn发布于 2015-12-08 19:50:41
grep -v ">" testfile | awk '{ print length }' >> charcount.txt可能就是你要找的东西。
发布于 2022-02-27 13:11:34
以您的输入文件为例:
cat >input.txt <<EOS
>C1
AGATGATGAGGATGAGATTGACTACGATCGATCGATGCATCGATCGGCATCGATCGACTGATCGATCGATCGATCGATCGATCGTACGATCGGCTACGCGCGATCGACGCGCGCGATCGATCGATCGTCGATCGGCGCGCTACGATCG
>C2
AGATGATGAGGATGAGATTGACTACGATCGATCGATGCATCGATCGGCATCGATCGACTGATCGATCGATCGATCGATCGATCGTACGATCGGCTACGCGCGATCGACGCGCGCGATCGATCGATCGTCGATCGGCGCGCTACGATCG
EOSGNU
grep -v '>' input.txt |
tr -s '\n' |
xargs -d '\n' -n1 sh -c 'printf %s "$@" | wc -c' sh148
148BSD
grep -v '>' input.txt |
tr '\n' '\0' | tr -s '\0' |
xargs -0 -n1 sh -c 'printf %s "$@" | wc -c' sh 148
148解释
tr -s是必需的,因为在输入文件中有空行,这会导致arguments.xargs,-d没有xargs标志,一个惯用的解决方案是使用printf而不是echo将它与tr.sh -c而不是printf %s "$@"为了防止转义characters.sh -c,$0需要一个额外的参数。这里我们使用sh,但您也可以使用任何其他合理的名称。-c字符串如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则会将它们分配给位置参数,从$0开始。https://stackoverflow.com/questions/34154246
复制相似问题