Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 按awk拆分字符串并打印除最后两个拆分之外的所有内容_Bash_Shell_Awk_Sed - Fatal编程技术网

Bash 按awk拆分字符串并打印除最后两个拆分之外的所有内容

Bash 按awk拆分字符串并打印除最后两个拆分之外的所有内容,bash,shell,awk,sed,Bash,Shell,Awk,Sed,我有一个字符串/home/lamma/local blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A_1.fq.gz 我正在使用awk拆分字符串: echo /home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A.fasta.gz | awk -F'.[^.]*$' '{ print $1 }' 返回: /home/lamma/l

我有一个字符串/home/lamma/local blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A_1.fq.gz 我正在使用awk拆分字符串:

echo  /home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A.fasta.gz | awk -F'.[^.]*$' '{ print $1 }'
返回:

/home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A.fasta
但我希望它能回来:

/home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A

我该怎么做呢?

你能试试下面的吗。可以使用bash的参数扩展

val="/home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A.fq.gz"
echo "${val%_*}"
输出如下

/home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A
编辑:根据anubhava先生的意见,以防变量发生变化。然后使用rev+awk解决方案尝试以下操作

echo "$val" | rev | awk 'BEGIN{FS=OFS="."} {$1=$2="";sub(/^\.+/,"");print $0}' | rev
echo "$val" | rev | sed 's/[^.]*.[^.]*.\(.*\)/\1/' | rev
EDIT2:添加sed+rev解决方案

echo "$val" | rev | awk 'BEGIN{FS=OFS="."} {$1=$2="";sub(/^\.+/,"");print $0}' | rev
echo "$val" | rev | sed 's/[^.]*.[^.]*.\(.*\)/\1/' | rev

你能试试下面的吗。可以使用bash的参数扩展

val="/home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A.fq.gz"
echo "${val%_*}"
输出如下

/home/lamma/local-blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A
编辑:根据anubhava先生的意见,以防变量发生变化。然后使用rev+awk解决方案尝试以下操作

echo "$val" | rev | awk 'BEGIN{FS=OFS="."} {$1=$2="";sub(/^\.+/,"");print $0}' | rev
echo "$val" | rev | sed 's/[^.]*.[^.]*.\(.*\)/\1/' | rev
EDIT2:添加sed+rev解决方案

echo "$val" | rev | awk 'BEGIN{FS=OFS="."} {$1=$2="";sub(/^\.+/,"");print $0}' | rev
echo "$val" | rev | sed 's/[^.]*.[^.]*.\(.*\)/\1/' | rev
按awk拆分字符串并打印除最后两个拆分之外的所有内容

您可以使用此awk:

按awk拆分字符串并打印除最后两个拆分之外的所有内容

您可以使用此awk:



只需使用.fasta作为分隔符:awk-F.fasta'{print$1}',这可以工作,但文件扩展名对我来说可能并不总是相同。这是否回答了您的问题?那么,删除字符串的某些部分的规则是什么?@corentilimier这似乎可以在您没有的情况下工作。在文件名中除文件扩展名以外的其他位置,不幸的是,我有时会这样做:只使用.fasta作为分隔符:awk-F.fasta'{print$1}',这可以工作,但文件扩展名对我来说可能并不总是相同。这是否回答了您的问题?那么,删除字符串的某些部分的规则是什么?@corentilimier这似乎可以在您没有的情况下工作。在文件名中,除了文件扩展名以外的其他点,不幸的是我有时会这样做:这确实有效,这只是一种比awk或@Lamma更好的方法吗,在这种情况下,IMHO yes对显示的示例来说是更好的命令。这种方法的局限性是什么,我可以通过谷歌查找更多信息?Hi@RavinderSingh13:如果输入为val='/home/lamma/local blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A.fasta.gz',那么这将给出/home/lamma/local blast/termitomycesBGI/short这不是OP想要的。@anubhava,谢谢,先生,我现在添加了编辑解决方案,先生,请让我知道编辑解决方案现在看起来是否不错,先生。这确实有效,这是不是比awk或?Lamma更好,在这种情况下,IMHO yes对显示的示例来说是更好的命令。这种方法的局限性是什么,我可以通过谷歌查找更多信息?Hi@RavinderSingh13:如果输入为val='/home/lamma/local blast/termitomycesBGI/short_reads/F19FTSEUHT1394.IC0035-2A.fasta.gz',那么这将给出/home/lamma/local blast/termitomycesBGI/short不是OP想要的。@anubhava,谢谢,先生,我现在添加了编辑解决方案,先生,请让我知道编辑解决方案现在看起来是否不错,先生。