5つの.txtファイルごとにマージ機能

5つの.txtファイルごとにマージ機能

問題があります。私のフォルダには1500個の.txtファイルがあります。 5つを1つにマージする関数を作成する必要があります。今私はこれをします:

cat 1.txt 2.txt 3.txt 4.txt 5.txt >> 1a.txt

ちなみに数字を変えるのに時間がかかります。より速くできる機能はありますか?

答え1

# Set the nullglob shell option to make globbing patterns
# expand to nothing if pattern does not match existing
# files (instead of remaining unexpanded).
shopt -s nullglob

# Get list of files into list of positional parameters.
# Avoid the files matching "*a.txt".
set -- *[!a].txt

# Concatenate five files at a time for as long as
# there are five or more files in the list.
while [ "$#" -ge 5 ]; do
    cat "$1" "$2" "$3" "$4" "$5" >"${n}a.txt"

    n=$(( n + 1 ))
    shift 5
done

# Handle any last files if number of files
# was not a factor of five.
if [ "$#" -gt 0 ]; then
    cat "$@" >"${n}a.txt"
fi

これは一度に5つのファイルをループにリンクして名前付きファイルを出力します1a.txt2a.txtこれらのファイルにファイル名サフィックス以外の特殊名があるとは想定していませんが、これらのファイルは出力ファイルであるため、.txtコードはファイルの一致を防ぎます。*a.txt

答え2

ファイル番号が順次付けられていると仮定します。

for i in {1..1500..5}; do
  cat "$i.txt" "$((i+1)).txt" "$((i+2)).txt" "$((i+3)).txt" "$((i+4)).txt" > "${i}a.txt"
done

これは以下を使用します。支柱の拡張デフォルト値を生成し、算術拡張残りの価値を計算してみてください。

関連情報