通过匹配文件名模式和连接文件内容来搜索文件

2024-06-28 12:13:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有10个文件夹,其中包含这样格式的文件

"xaaNP_len_0.fa"

或者

^{pr2}$

“xaa”部分对于它所在的文件夹是唯一的。文件夹命名为

^{3}$

我想把所有匹配特定模式的文件连接在一起。在

例如,我想连接所有

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

Tags: 文件目录文件夹len格式np方式模式
2条回答

试试这个脚本:

#!/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
)

对于第二个NP_len_*.fa模式,regex可以如下所示

.+NP_len_\d{1,3}.fa

而对于第一个你不想让N我们的

^{pr2}$

它将匹配除N之前的N之外的所有模式。我已经考虑过文件夹名称将来可能会增长到您xaa部分。也可以匹配长度为3的字符串。在

相关问题 更多 >