我的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
答案 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。
答案 2 :(得分:-1)
我找到SmarterCSV,所以我能够轻松完成:
array_of_hashes = SmarterCSV.process('file.csv')
array_of_hashes.sort_by! { |hsh| hsh[:value1] }