如何根据带有Bash的数字列表删除文件中的一系列位置

问题描述 投票:0回答:1

我在Bash脚本中还很陌生,我有一个要解决的问题。我有一个看起来像这样的文件:

>atac
ATTGGCAATTAAATTCTTTT
>lipa
ATTACCAAGTAAATTCTTTT
.
.
.

其中每个偶数行具有相同的长度,但是可以具有不同的字符,我需要在每个偶数行中删除.txt文件中列出的一系列位置。 .txt文件只有一个数字列表,每行一个,与要删除的位置相对应,如下所示:

3
5
8
10
11

预期输出的每一偶数行必须保持相同的长度,但是在每行中,必须删除.txt文件中列出的位置。有什么建议吗?

bash fasta
1个回答
1
投票

如果txt文件中的“位置”始终表示原始字符串的索引,则该awk-oneliner会为您提供帮助:

awk 'NR==FNR{a[$0];next}FNR%2==0{for(x in a)$x=""}7' your.txt  FS="" OFS="" file
>atac
ATGCATAATTCTTTT
>lipa
ATACAGAATTCTTTT

我们标记(作为“ -”)已删除的字符,以便您可以验证结果是否正确:

 awk 'NR==FNR{a[$0];next}FNR%2==0{for(x in a)$x="-"}7' txt  FS="" OFS="" file
>atac
AT-G-CA-T--AATTCTTTT
>lipa
AT-A-CA-G--AATTCTTTT
© www.soinside.com 2019 - 2024. All rights reserved.