Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String Bash循环到gunzip文件并删除文件扩展名和文件前缀_String_Bash_Shell_Command Line - Fatal编程技术网

String Bash循环到gunzip文件并删除文件扩展名和文件前缀

String Bash循环到gunzip文件并删除文件扩展名和文件前缀,string,bash,shell,command-line,String,Bash,Shell,Command Line,我有几个.vcf.gz文件: subset_file1.vcf.vcf.gz subset_file2.vcf.vcf.gz subset_file3.vcf.vcf.gz 我想快速压缩这些文件并重命名它们(一次性删除子集和redudant.vcf扩展名并获取这些文件: file1.vcf file2.vcf file3.vcf 这是我尝试过的脚本: iFILES=/file/path/*.gz for i in $iFILES; do gunzip -k $i > /get/in/t

我有几个.vcf.gz文件:

subset_file1.vcf.vcf.gz
subset_file2.vcf.vcf.gz
subset_file3.vcf.vcf.gz
我想快速压缩这些文件并重命名它们(一次性删除
子集
和redudant
.vcf
扩展名并获取这些文件:

file1.vcf
file2.vcf
file3.vcf
这是我尝试过的脚本:

iFILES=/file/path/*.gz
for i in $iFILES;
do gunzip -k $i > /get/in/this/dir/"${i##*/}"
done

因为您必须在输出路径名处执行三次操作

1.删除目录部分

2.删除前缀
子集

3.删除冗余扩展
.vcf

只用一个命令是很难完成的

下面是一个修改版本。请小心尝试。我没有在我的计算机上彻底测试它

for i in /file/path/*.gz;
do 
    # get the output file name
    o=$(echo ${i##*/} | sed 's/.*_\(.*\)\(\.[a-z]\{3\}\)\{2\}.*/\1\2/g')       
    gunzip -k $i > /get/in/this/dir/$o
done

因为您必须在输出路径名处执行三次操作

1.删除目录部分

2.删除前缀
子集

3.删除冗余扩展
.vcf

只用一个命令是很难完成的

下面是一个修改版本。请小心尝试。我没有在我的计算机上彻底测试它

for i in /file/path/*.gz;
do 
    # get the output file name
    o=$(echo ${i##*/} | sed 's/.*_\(.*\)\(\.[a-z]\{3\}\)\{2\}.*/\1\2/g')       
    gunzip -k $i > /get/in/this/dir/$o
done

我建议更改sed命令以显式地使用字符串“subset”(
s/subset\(.*)\(\.[a-z]\{3\})\{2\.*/\1\2/g
)来避免贪婪的
*
文件名,包括下划线。是的,这是一个很好的建议。或者更改为
sed's/[^a-z]\+\+\\\\++\.\.[[a-z]\{3\}}{2\\\.*/\1\2/g'
移动第一个前缀xi建议更改sed命令以显式使用字符串“subset”(
s/subset\(.*)\)(\.[a-z]\{3\})\{2\}.*/\1\2/g
)以避免贪婪的
*
文件名,包括下划线。是的,这是一个好建议。或者更改为
sed's/[^\+++\\\\\\\\\\[[a-z]\\{3\\\\\\\\\\\\}{2}{.*/\1\2/g'
移动第一个前缀