【问题标题】:Convert CSV to Matrix将 CSV 转换为矩阵
【发布时间】:2018-06-05 04:36:16
【问题描述】:

我正在尝试将 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

示例概念图:

预期的矩阵设置:

      18
             25  
   30
         45
70   60
            65

【问题讨论】:

  • XY 问题是询问您尝试的解决方案,而不是您的实际问题。
  • 目标是什么?您要创建 SVG 图形吗?
  • @Cyrus,目标是一个.dat文件的第一列数据的行和列,从左下(西南)到右上(东北)排序

标签: arrays bash csv sorting matrix


【解决方案1】:

如果可以使用 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 不是您的示例数据中的最南端。
希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 2015-10-28
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多