2016-12-15 35 views
0

我有一些CSV與許多列每記錄;有些是整數,有些是(短)引用的字符串。所有CSV都具有相同的列(以及列中的數據類型)。爲簡單起見,假設列名是c1,c2,c3,c4。什麼是從shell腳本更改CSV排序順序的快捷方式?

我的CSV現在按列c1,c3,然後c2排序(即不是文件中記錄字符串的字典順序);我想按順序對c1-c4-c2進行重新排序。在bash腳本中做什麼是一種快速簡單的方法?

注:

  • 兩個訂單總的,即沒有兩個記錄具有相同的C1,C3和C2,也不相同C1,C4和C2的組合。
  • 我故意舉了一個例子,第一列按順序排列第一,因爲這是我的具體情況,但是否取決於您的假設取決於您。
  • 你可以聲稱唯一要做的是用另一種語言編寫程序來做到這一點(儘管我希望得到不同的答案)。
  • 這些字符串沒有轉義引號或任何其他的瘋狂,所以解析很容易。

回答

1

如果沒有引述逗號,sort應該足夠:

sort -t, -k1,1 -k4,4 -k2,2 file.csv > sorted.csv 
+0

啊......那種能夠做到這一點......好了,但怎麼樣的事實,有些領域是數字和其他AREN 「T? – einpoklum

+0

另外,如果一些數字用引號引起來呢? – einpoklum

+1

@einpoklum:對於數字字段,添加'n':'-k4,4n'。 – choroba

相關問題