使用 sed 提取 line/filename 的中间部分

Using sed to extract the middle of a line/filename

我有多个文件名为:

Genus_species_strain.fasta

我想用sed打印出来:

Genus

species

strain

我想在这样的命令中使用“打印”的单词(prokka 是基因组注释的工具):

prokka $file --outdir `echo $file | sed s/\.fasta//` --genus `echo $file | sed s/_.*\.fasta//` --species `echo $file | sed <something here>` --strain `echo $file | sed <something here>`

非常感谢您的帮助。我对这一切都很陌生,正如你在上面看到的,我只知道如何打印 Genus.

下面我还有一些额外的问题(如果只会使事情变得更复杂,则无需回答这些问题)。这是我打印species的尝试之一,问题如下:

sed s/.*_//1 | sed s/_.*\.fasta//
  1. 我知道第二个命令不正确。我假设它需要从第二个 _ 开始,但我不知道该怎么做,因为延续(即 .fasta)是唯一的。

  2. 单独使用时,sed s/.*_//1returnsstrain.fasta。如何让它不跳过第一个 _?

  3. 组合命令(如上所示,或与 ; 组合)似乎对我不起作用。

您可以将字符串拆分与字符串操作结合使用:

file='Genus_species_strain.fasta'
IFS='[_.]' read -r genus species strain _ <<< "$file"
outdir="${file%.*}"

然后就可以在命令中使用变量了:

prokka "$file" --outdir "$outdir" --genus "$genus" --species "$species" --strain "$strain"

查看此在线演示:

#!/bin/bash
file='Genus_species_strain.fasta'
IFS='[_.]' read -r genus species strain _ <<< "$file"
echo "${file%.*}" # outdir
echo "$genus"
echo "$species"
echo "$strain"

输出:

Genus_species_strain
Genus
species
strain

一行不设置多个变量 使用 sed 捕获组: 一班

file='Genus_species_strain.fasta'
$(echo "$file" | sed "s/\(^[^_]*\)_\([^_]*\)_\([^_]*\)\.\(.*\)/prokka "$(echo "$file")" --outdir  --genus  --species  --strain /")

使用 Bash 字符串操作: 一班

file='Genus_species_strain.fasta'
$(echo prokka "$file" --outdir `echo "${file#*.}"` --genus `echo "${file%%_*}"` --species "$(echo `file=${file#*_} && echo "${file%%_*}"`)" --strain "$(echo `file=${file#*_} && file=${file#*_} && echo "${file%%.*}"`)")

awk 一行

file='Genus_species_strain.fasta'
$(echo "$file" | awk -F [_\.] -v var="$file" '{print "prokka " $var " --outdir "  " --genus "  " --species "  " --strain " }')

现在您可以在循环中使用上述命令,或者将 xargs 与指向文件名的文件变量一起使用。 它将创建一个 prokka 命令并直接 evaluates/executes 它。

希望它对你有用。如果答案更有效,请采纳

使用sed

$ file=path_to_file
$ sed "s/\(\([^_]*\)_\([^_]*\)_\([^.]*\)\).*/prokka $file --outdir  --genus  --species  --strain /e" <(echo *.fasta)

执行命令的输出

prokka path_to_file --outdir Genus_species_strain --genus Genus --species species --strain strain