假设我有三列,每列有超过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的解决方案。
答案 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]
遍历列表文件
将行拆分为字段(处理尾随空格)
打印该密钥的哈希内容
完成了理智检查