Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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脚本使用cat更智能_Bash_Unix_Cat - Fatal编程技术网

BASH脚本使用cat更智能

BASH脚本使用cat更智能,bash,unix,cat,Bash,Unix,Cat,我在多个文件夹中有多个文件 [tiagocastro@cascudo clean_reads]$ ls 11 13 14 16 17 18 3 4 5 6 8 9 我想制作一个小的bash脚本来连接这些文件: 11]$ ls FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L6_1.fq FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L7_1.fq FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L6_2.fq

我在多个文件夹中有多个文件

[tiagocastro@cascudo clean_reads]$ ls
11  13  14  16  17  18  3  4  5  6  8  9 
我想制作一个小的bash脚本来连接这些文件:

11]$ ls
FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L6_1.fq  FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L7_1.fq
FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L6_2.fq  FCC4UE9ACXX-HUMcqqTAAFRAAPEI-206_L7_2.fq
但只有L6和L6以及L7和L7

现在我处于基础阶段。我想学习如何更巧妙地执行它,而不是在脚本中重现我可以在终端中执行的命令


谢谢大家,谢谢你们帮助我

这不是一项免费的编程服务,但您可以从下一项服务中学到一些东西:

#!/bin/bash
echo2() { echo "$@" >&2; }

get_Lnums() {
        find . -type f -regextype posix-extended -iregex '.*_L[0-9]+_[0-9]+\.fq' -maxdepth 1 -print | grep -oP '_\KL\d+' | sort -u
}

docat() {
        echo2 doing $(pwd)
        for lnum in $(get_Lnums)
        do
                echo cat *_${lnum}_*.fq "> new_${lnum}.all"   #remove (comment out) this line when satisfied
                #cat *_${lnum}_*.fq > new_${lnum}.all #and uncomment this
        done
}

while read -r -d $'\0' dir
do
        (cd "$dir" && docat)   #subshell - don't need cd back
done < <(find . -type dir -maxdepth 1 -mindepth 1 -print0)
#/bin/bash
echo2(){echo“$@”>&2;}
获取{
find.-type f-regextype posix extended-iregex'.*\u L[0-9]+\u[0-9]+\.fq'-maxdepth 1-print | grep-oP'.\ukl\d+'| sort-u
}
docat(){
echo2 doing$(pwd)
以美元表示的lnum(获取Lnums)
做
echo cat*.${lnum}.*.fq“>new${lnum}.all”#满意时删除(注释掉)此行
#cat*.${lnum}.*.fq>new${lnum}.all#并取消对此的注释
完成
}
读取-r-d$'\0'目录时
做
(cd“$dir”和&docat)#子shell-不需要回cd

完成<需要澄清:您的意思是文件将被命名为,
xxxxxx\u 1.fq
xxxxxx\u 2.fq
,例如,您希望这些文件组合成
xxxxxx.fq
?所有的名字都严格遵循这个模式吗?试一下
cat*\ul6\u*>newL6
cat*\ul7\u*>newL7
-或者这里有更复杂的东西?是的,我可以这样做:试一下cat*\ul6\uuU6和cat*>newL7,但是我如何为文件夹中的所有文件做一次呢?我无法摆脱文件夹。我可以这样做:尝试对每个文件夹使用cat\u L6\u>newL6和cat\u L7\u>newL7,但实际上我想学习编写更聪明的bash脚本。你想,对于
clean\u reads
下的每个文件夹,将所有
*L6*
文件合并到一个文件中,并对所有
*L7*
文件执行相同的操作吗?使用
cat
是正确的想法(假设您只有从0到9命名的文件,或者使用填充编号,因为glob将在1之后但在2之前排序10和11,否则)。然后,您只需在
clean_读取的
cat
命令周围的条目上添加一个循环即可。非常感谢。我不想要免费服务,但要学习。谢谢你的指导。