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

How to delete a series of positions within a file based on a list of numbers with Bash

我是 Bash 脚本编写的新手,我有一个问题需要解决。我有一个看起来像这样的文件:

>atac
ATTGGCAATTAAATTCTTTT
>lipa
ATTACCAAGTAAATTCTTTT
.
.
.

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

3
5
8
10
11

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

如果 txt 文件中的 "position" 始终表示原始字符串的索引,这个 awk-oneliner 将帮助您:

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

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

 awk 'NR==FNR{a[[=11=]];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