将CSV转换为Matrix

时间:2017-12-22 14:13:26

标签: arrays bash csv sorting matrix

我正在尝试转换CSV文件中第一列的值,并将这些值从最低纬度/最高经度(西南)到最高纬度/最低经度(东北)排列成矩阵。

此CSV文件包含数百行数据。

我知道我将需要使用sort来完成此任务,但是,我不确定到目前为止我的内容是否足够。

示例:

18,49.000,-96.000
30,41.000,-109.000
65,31.000,-80.000
25,47.000,-75.000
45,37.000,-90.000
60,30.000,-100.000
70,30.000,-118.000
...
...
...

Bash代码:

sort -t',' -nr -k2 -k3

结果:

18,49.000,-96.000
25,47.000,-75.000
30,41.000,-109.000
45,37.000,-90.000
65,31.000,-80.000
60,30.000,-100.000
70,30.000,-118.000

示例概念图:

enter image description here

预期的矩阵设置:

      18
             25  
   30
         45
70   60
            65

1 个答案:

答案 0 :(得分:0)

如果可以使用像Perl这样的通用编程语言,请尝试以下方法:

perl -e '
while (<>) {
    ($code, $lat, $long) = split(/,/);
    $lats{$lat}++;
    $longs{$long}++;
    $map{$lat, $long} = $code;
}

for $lat (sort {$b <=> $a} keys %lats) {
    for $long (sort {$a <=> $b} keys %longs) {
            $str = $map{$lat, $long} || "  ";
            print $str . " ";
    }
    print "\n";
}' samplefile

,结果如下:

         18
                  25
   30
            45
               65
70    60

请注意,样本数据中#65不是最南端 希望这会有所帮助。