我有一份数据,格式如下:
foo<tab>1.00<space>1.33<space>2.00<tab>3
现在我试着根据最后一个字段对文件进行排序。
我尝试了以下命令,但它没有按我们预期的排序。
$ sort -k3nr file.txt # apparently this sort by space as delimiter
$ sort -t"\t" -k3nr file.txt
sort: multi-character tab `\\t'
$ sort -t "`/bin/echo '\t'`" -k3,3nr file.txt
sort: multi-character tab `\\t'
正确的做法是什么?
下面是示例数据。
一般来说,如果可以避免的话,像这样保存数据并不是一件好事,因为人们总是混淆制表符和空格。
用Perl、Python或Ruby这样的脚本语言解决问题非常简单。下面是一些示例代码:
#!/usr/bin/perl -w
use strict;
my $sort_field = 2;
my $split_regex = qr{\s+};
my @data;
push @data, "7 8\t 9";
push @data, "4 5\t 6";
push @data, "1 2\t 3";
my @sorted_data =
map { $_->[1] }
sort { $a->[0] <=> $b->[0] }
map { [ ( split $split_regex, $_ )[$sort_field], $_ ] }
@data;
print "unsorted\n";
print join "\n", @data, "\n";
print "sorted by $sort_field, lines split by $split_regex\n";
print join "\n", @sorted_data, "\n";