我有10个文件夹,其中包含格式化的文件,如此
"xaaNP_len_0.fa"
或
"xaaP_len_0.fa"
“xaa”部分对于它所在的文件夹是唯一的。文件夹名为
[xaa, xab....xaj]
我想将所有匹配特定模式的文件连接在一起。
例如,我想连接所有
P_len_*.fa
其中*是0到100之间的整数。这不应该包括“P”左边有“N”的情况。
接下来我想连接所有
NP_len_*.fa
在所有10个目录中以相同的方式汇总文件。
文件的结构是扁平的。例如
xaa/xaaNP_len_0.fa
xab/xabNP_len_0.fa
应该都进入一个名为
的文件NP_len_0.fa
答案 0 :(得分:1)
对于第二个NP_len_*.fa
模式,regex
可以像
.+NP_len_\d{1,3}.fa
并且对于您不希望N
我们这个
.+?[^N]P_len_\d{1,3}.fa
此版本将匹配除N
之前P
之外的所有模式。我认为文件夹名称将来可能会增长xaa
部分。你也可以匹配长度为3的字符串。
答案 1 :(得分:1)
试试这个脚本:
#!/bin/bash
NEXT=''
for (( ;; )); do
if [[ -n $NEXT ]]; then
LINE=$NEXT
NEXT=''
else
read LINE || break
fi
FILES=("$LINE")
FORMAT=${LINE#???/???}
while read LINE; do
if [[ $LINE == ???/???"$FORMAT" ]]; then
FILES+=("$LINE")
else
NEXT=$LINE
break
fi
done
echo "Concatenating ${FILES[*]} to $FORMAT."
cat "${FILES[@]}" > "$FORMAT"
done < <(
find xa?/ -mindepth 1 -maxdepth 1 -type f -name '???P_len_*.fa' | sort -k 1.14 -n
find xa?/ -mindepth 1 -maxdepth 1 -type f -name '???NP_len_*.fa' | sort -k 1.15 -n
)