awk - 如果模式存在于另一列中,则从该列中移除模式

标签 awk sed

我有这个文件:

>AX-89916436-Affx-G-[A/G]
TTGTCCGAGAGTGACGTCAATCCGCA
>AX-89916437-Affx-A-[A/G]
TGTGTGGAAACTCCG
>AX-89916438-Affx-C-[A/C]
GAAGTACGGTAACAT
>AX-89916440-Affx-T-[G/T]
AGTTGATGGTGTATGTGTGTCTTT

我想在最后一个字段 [X/X] 中删除第四个字段中出现的字母。要得到这样的东西:

>AX-89916436-Affx-G-A
TTGTCCGAGAGTGACGTCAATCCGCA
>AX-89916437-Affx-A-G
TGTGTGGAAACTCCG
>AX-89916438-Affx-C-A
GAAGTACGGTAACAT
>AX-89916440-Affx-T-G
AGTTGATGGTGTATGTGTGTCTTT

我有:

 awk -F'-' '
    match($0, /\[[A-Z]\/[A-Z]]/) {m = substr($0, RSTART, RLENGTH); if(/^>/ && $NF~/m/); print ... }'

最佳答案

$ awk 'BEGIN{FS=OFS="-"} />/{gsub("[][/]",""); sub($(NF-1),"",$NF)}1' file
>AX-89916436-Affx-G-A
XXXXXXX
>AX-89916437-Affx-A-G
XXXXXXXXXXX
>AX-89916438-Affx-C-A
XXXXXXX
>AX-89916440-Affx-T-G
XXXXXXX

关于awk - 如果模式存在于另一列中,则从该列中移除模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72185380/

相关文章:

bash: awk 替换文件中的字符串

bash - 如何用空格分隔 "sentence"中的单词?

bash - Sed 命令不识别撇号

正则表达式一个参数数目未知的字符串

linux - 根据第一列/行中的字符长度对文件进行排序

python - 从非列文件中提取数据(在 awk 中)

linux - 使用 sed 替换字符串

linux - 需要有关使用 sed 格式化行的帮助

sql - AWK - 解析 SQL 输出