Bash 仅抓取文件所有行中第4和第7下划线之间的文本/子字符串

Bash 仅抓取文件所有行中第4和第7下划线之间的文本/子字符串,bash,awk,sed,substring,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_

我有一个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
输出:

BOLD1_100_KL01 BOLD1_500_KL01 BOLD2_Sessile_LD03 粗体1_100_KL01 粗体1_500_KL01 粗体2\u无柄\u LD03
我觉得awk在这方面做得太过分了。您可以仅使用选择所需的字段:

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