いくつかの特定のファイルを2つにまとめて、正しい順序でプログラムに供給する必要があります。
私が持っているなら
A_file.txt
B_file.txt
C_file.txt
D_file.txt
ファイルAとBが最初に処理され、次にCやDなどが処理されるようにプログラムに供給する必要があります。本質的に:
for i in *.txt; do
some_program A_file.txt B_file.txt > output_AB
some_program C_file.txt D_file.txt > output_CD
上記は意味がないことを知っていますが、要点を説明するためのものです。既定では、.txt
フォルダー内のすべてのファイルを繰り返しますが、一度に 2 つのファイルをプログラムに供給し、次の 2 つのファイルに移動します。
まだ学んでいます。本当にありがとうございます。
ベストアンサー1
#!/bin/sh
set -- *_file.txt
until [ "$#" -lt 2 ]; do
process "$1" "$2" >"output_${1%_file.txt}${2%_file.txt}"
shift 2
done
これにより、質問の名前と一致するファイル名のワイルドカードパターンに基づいて、目的のファイル名のリストに位置パラメータが設定されます。次に、リストに2つ未満の名前が残るまで($#
位置引数リストの長さ)、ループを使用してこのリストを繰り返します。
各反復では、リストの最初の2つの要素が処理され、それを使用して$1
リスト$2
から削除されますshift 2
。
処理された出力は名前付きファイルにリダイレクトされ、output_
その後に2つのファイル名の変数部分(_file.txt
各ファイルの静的文字列の前にある項目)が連結されます。
これは、名前をアルファベット順にソートする方法(ワイルドカードパターンの拡張を使用することができます)でファイル名が指定され、質問に示すようにペアにできる名前のリストが生成されると仮定します。