按值对CSV列进行排序

时间:2016-11-07 22:55:36

标签: ruby sorting csv

我的CSV文件看起来像

Name,Value1,Value2,Value3
bbb,1,3,4
aaa,5,1,7
ccc,2,2,5

有没有办法按Value1排序? 所以结果将是

  

BBB,1,3,4-
  CCC,2,2,5
  AAA,5,1,7

3 个答案:

答案 0 :(得分:1)

如果要将所有值存储在数组或散列数组中,则可以使用Enumerable#sort

sort_index = 1 # or Hash Key "Value1"
values.sort { |a, b| a[sort_index] <=> b[sort_index] }

注意:不使用bang !,这将返回已排序的列表。如果您希望它就地更改,请使用#sort!

答案 1 :(得分:0)

使用Raku(以前称为Perl6)

~$ cat "sort_col2.txt" | raku -e 'my @a = lines(); \
my @b = @a>>.comb(/^^ .*?  \, <(\d+)> \, /).flat; \
my $c = @b.pairs.sort(*.values)>>.keys.flat; \
@a[$c.flat].join("\n").put'

输出:

Name,Value1,Value2,Value3
bbb,1,3,4
ccc,2,2,5
aaa,5,1,7

HTH。

https://raku.org

答案 2 :(得分:-1)

我找到SmarterCSV,所以我能够轻松完成:

array_of_hashes = SmarterCSV.process('file.csv')
array_of_hashes.sort_by! { |hsh| hsh[:value1] }