1

私はそのようにフォーマットされたファイルを含む10個のフォルダを持っています

"xaaNP_len_0.fa"

また

"xaaP_len_0.fa"

「xaa」の部分は、それが入っているフォルダーに固有です。フォルダーには名前が付けられています

[xaa, xab....xaj]

特定のパターンに一致するすべてのファイルを連結したいと考えています。

たとえば、すべてを連結したいと思います

P_len_*.fa

ここで、* は 0 から 100 までの整数です。これには、「P」の左側に「N」がある場合は含まれません。

次に、すべてを連結したい

NP_len_*.fa

10個のディレクトリすべてで同じ方法でファイルをまとめます.e

ファイルの構造はフラットです。例えば

xaa/xaaNP_len_0.fa
xab/xabNP_len_0.fa

すべてがという名前の1つのファイルに入る必要があります

NP_len_0.fa
4

2 に答える 2

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
)
于 2013-08-28T09:24:55.543 に答える