bash - 仅抓取文件所有行中第四个和第七个下划线之间的文本/子字符串

标签 bash awk sed substring

我有一个 list.txt,其中包含以下几行。

Primer_Adapter_clean_KL01_BOLD1_100_KL01_BOLD1_100_N701_S507_L001_merged.fasta
Primer_Adapt_clean_KL01_BOLD1_500_KL01_BOLD1_500_N704_S507_L001_merged.fasta
Primer_Adapt_clean_LD03_BOLD2_Sessile_LD03_BOLD2_Sessile_N710_S506_L001_merged.fasta

现在我只想获取第四个下划线和第七个下划线之间的子字符串,如下所示

BOLD1_100_KL01
BOLD1_500_KL01
BOLD2_Sessile_LD03

我尝试了下面的 awk 命令,但我想我弄错了。任何帮助将不胜感激。如果这可以通过 sed 实现,我也会对该解决方案感兴趣。

awk -v FPAT="[^__]*" '$4=$7' list.txt

最佳答案

我觉得 awk 对此有点过分了。您可以使用 cut仅选择您想要的字段:

$ cut -d_ -f5-7 list.txt
BOLD1_100_KL01
BOLD1_500_KL01
BOLD2_Sessile_LD03

关于bash - 仅抓取文件所有行中第四个和第七个下划线之间的文本/子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62480062/

相关文章:

performance - 加速 gz 文件上的 sed

regex - 从区域文件中提取 IP 和指针记录

linux - 如何在多个文件中运行多年和 12 个日历月的时间戳?

awk - 如何使用 awk 重命名重复行?

mysql - 删除 csv 文件中最多第 N 个模式匹配实例的文本

shell - 在awk中,如何在打印$2时忽略错误行,但错误行中不存在$2

regex - 修改 `sed` 以从字符串中删除确切的标签

linux - ssh 连接到另一台服务器上的用户并以该用户身份执行 shell 命令

html - 如何使用 shell/bash 将 txt 转换为 html 格式

linux - setenv bash 命令在 shell 中不起作用