0
所以我的程序讀取一個csv並根據字段對行進行排序。它首先排序好。問題是後來當我需要根據另一個字段對它進行排序時,我寫的函數似乎在中途排序,然後退出排序。這是我的函數看起來像:排序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
}
使用這種方法排序後,如果我從_records呼應了所有的值,它有條目量的兩倍,由新字段排序上半年,第二按照我原來的方式排序。奇怪的是,輸出數組中的項目數量(通過echo ${#_records[@]}
)在排序前後返回相同的數字,並以重複結束。
我該如何排序這個數組,而沒有得到所有重複的結果?
我意識到這可能是一個容易的問題,但這是對於學校而言,我從來沒有經歷過在bash中編寫腳本的經驗。我試圖搜索網站,但找不到任何引用我的問題的東西。
編輯:對於那些有興趣,這裏是如何記錄最初傳入_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
'_records'不是數組(至少在第一次調用sortByField後沒有),因爲'tmp'不是數組。兩者都是單個字符串,包含一系列由換行符分隔的單詞。 – chepner
如果您的教師正在告訴您使用backquotes而不是'$(...)',那麼您現在應該放棄該課程。 – chepner