对列进行排序,同时保持行不变

时间:2015-10-01 22:39:26

标签: tablesorter

假设我有三列,每列有超过1,000个条目

A B C

1 2 6

5 3 7

7 4 8

现在我将A列中的元素重新排序为

5

1

7 ...

如何对列B和C进行排序,以便我有

5 3 7

1 2 6

7 4 8 ...

Excel具有“自定义列表”排序功能,可以完全按照我的意愿执行。我需要做的就是在“自定义列表”中输入第1列“5,1,7,...”。但是,如果我的第1列有1,000多个条目(我无法将列表粘贴到那里),它就不起作用。我正在寻找一个awk或grep的解决方案。

1 个答案:

答案 0 :(得分:0)

如果您对Perl解决方案持开放态度:

($in, $list) = @ARGV;
open IN, "< $in" or die;
while ($line = <IN>) {
    @F = split /\s+/, $line;
    if (defined $h{$F[0]}) {
        die "ERROR:  multiple input lines have first column $F[0]\n";
    }
    $h{$F[0]} = $line;
}
open LIST, "< $list" or die;
while ($line = <LIST>) {
    @F = split /\s+/, $line;
    if (defined $h{$F[0]}) {
        print $h{$F[0]};
    } else {
        die "ERROR:  no match found for $F[0]\n";
    }
}

将此文件另存为&#34;脚本&#34;
将输入数据保存为&#34;输入&#34;
将自定义列表保存为&#34;列表&#34;
运行:perl script input list

工作原理:
迭代输入文件,其中包含由空格分隔的数据列。如果输入文件以逗号分隔,请将/\s+/更改为/,/
将行拆分为字段数组@F
将行存储到哈希h中,根据第一个字段$F[0]

键入

遍历列表文件
将行拆分为字段(处理尾随空格)
打印该密钥的哈希内容

完成了理智检查