使用 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//
我知道第二个命令不正确。我假设它需要从第二个 _
开始,但我不知道该怎么做,因为延续(即 .fasta
)是唯一的。
单独使用时,sed s/.*_//1
returnsstrain.fasta
。如何让它不跳过第一个 _
?
组合命令(如上所示,或与 ;
组合)似乎对我不起作用。
您可以将字符串拆分与字符串操作结合使用:
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
我有多个文件名为:
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//
我知道第二个命令不正确。我假设它需要从第二个
_
开始,但我不知道该怎么做,因为延续(即.fasta
)是唯一的。单独使用时,
sed s/.*_//1
returnsstrain.fasta
。如何让它不跳过第一个_
?组合命令(如上所示,或与
;
组合)似乎对我不起作用。
您可以将字符串拆分与字符串操作结合使用:
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