私のプログラムはcsvを読み込み、フィールドに基づいて行をソートします。これは最初のソートをうまく行います。問題は後で別のフィールドに基づいてソートする必要があるときです。私が書いた関数は途中でソートしてからソートを終了するようです。これは私の関数は次のようになります。私は_recordsからすべての値をエコーする場合は、このメソッドを使用してソートした後bashで並べ替えcsv文字列を正しくソートしない
function sortByField() {
local fieldId=$((`indexOf $1` + 1)) #indexOf returns an int representing a zero based index
tmp=`for x in ${_records[@]}; do echo $x; done | sort -t$DELIMITER -k$fieldId,${fieldId}n`
_records=$tmp
}
、それは二重のエントリの量、新しいフィールドでソートされた前半、二を持っています私は元々やったやり方でソートしました。奇妙なことに、(echo ${#_records[@]}
を介して)配列内の項目の量を出力すると、ソートの前後に同じ番号が返され、重複して終了します。
重複した結果をすべて取得せずに、この配列を並べ替えるだけですか?
これは簡単な質問かもしれませんが、これは学校向けのものであり、私はbashでのスクリプト作成では決して経験していません。私はサイトを検索しようとしましたが、私の問題を参照しているものは見つかりませんでした。
EDIT:興味がある方のために、ここでは、レコードが最初に_records
に渡される方法は次のとおりです。
#after creating an array t containing all the csv fields, translate it back to string format with the additional fields
_records[$i]=`echo "${t[@]} $vprio $remTime $START_TIME_DEFAULT | tr ' ' ','"`
あなたはコースを受講しており、Bashでプログラムを書く必要がありますか?それは興味深い。どんなコースですか? – ashawley
'tmp'は配列ではないので、' _records'は配列ではありません(少なくとも 'sortByField'を最初に呼び出した後ではありません)。両方とも、改行で区切られた一連の単語を含む単一の文字列です。 – chepner
インストラクターが '$(...) 'の代わりにバッククォートを使用するように指示している場合は、今コースを中止する必要があります。 – chepner