将CSV转换为Matrix

问题描述 投票:0回答:1

我正在尝试转换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
arrays bash csv sorting matrix
1个回答
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不是样本数据中的最南端。 希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.