如何使用 sort 命令对制表符分隔的文件进行排序?
- 2024-10-22 08:28:00
- admin 原创
- 95
问题描述:
我有以下格式的数据:
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" " -k3nr file.txt
sort: multi-character tab `\\t'
$ sort -t "`/bin/echo ' '`" -k3,3nr file.txt
sort: multi-character tab `\\t'
正确的做法是什么?
解决方案 1:
使用bash可以达到这个目的:
$ sort -t$' ' -k3 -nr file.txt
注意单引号字符串前面的美元符号。您可以在bash手册页的 ANSI-C 引用部分中阅读有关它的内容。
解决方案 2:
默认情况下,字段分隔符是从非空白到空白的过渡,因此制表符应该可以正常工作。
但是,这些列是以 1 和 0 为基数进行索引的,因此您可能需要
sort -k4nr file.txt
按第 4 列的数字反向对 file.txt 进行排序。(尽管问题中的数据有 5 个字段,因此最后一个字段的索引为 5。)
解决方案 3:
您需要在 -t\ 后面放置一个实际的制表符,要在 shell 中执行此操作,请按 ctrl-v,然后按制表符。我使用过的大多数 shell 都支持这种文字制表符输入模式。
但要小心,因为从其他地方复制和粘贴通常不会保留标签。
解决方案 4:
$ 解决方案对我来说不起作用。但是,通过将制表符本身放入命令中确实可以:sort -t'' -k2
解决方案 5:
我想要一个适用于 Windows 的 Gnu 排序解决方案,但上述解决方案在命令行上都不适用于我。
使用 Lloyd 的线索,以下批处理文件 (.bat) 对我有用。
在双引号内输入制表符。
C:>cat foo.bat
sort -k3 -t" " tabfile.txt
解决方案 6:
我在 bash shell 中使用 cygwin 进行排序时遇到了这个问题。如果我指定了-t$' ' -kFg
,其中 F 是字段编号,它不起作用,但是当我同时指定-t$' '
和-kF,Fg
(例如-k7,7g
第 7 个字段)时,它起作用了。-kF,Fg
没有 则-t$' '
不起作用。
解决方案 7:
sort -t "$(printf ' ')"
对我有用
解决方案 8:
一般来说,如果可以避免的话,保存这样的数据并不是一件好事情,因为人们总是混淆制表符和空格。
使用脚本语言(例如 Perl、Python 或 Ruby)解决您的问题非常简单。以下是一些示例代码:
#!/usr/bin/perl -w
use strict;
my $sort_field = 2;
my $split_regex = qr{s+};
my @data;
push @data, "7 8 9";
push @data, "4 5 6";
push @data, "1 2 3";
my @sorted_data =
map { $_->[1] }
sort { $a->[0] <=> $b->[0] }
map { [ ( split $split_regex, $_ )[$sort_field], $_ ] }
@data;
print "unsorted
";
print join "
", @data, "
";
print "sorted by $sort_field, lines split by $split_regex
";
print join "
", @sorted_data, "
";
解决方案 9:
通过类似 的管道将其传输出去awk '{ print print $1" "$2" "$3" "$4" "$5 }'
。这会将空格更改为制表符。
解决方案 10:
如果您希望仅使用制表符来让自己更轻松,请将空格替换为制表符:
tr " " " " < <file> | sort <options>
解决方案 11:
Lars Haugseth 的答案仅适用于命令行,如果从 shell 脚本执行则会出现此错误:
排序:多字符制表符 '$\t'
如果有人在看的话,解决方案是使用 shell 脚本编码的
sort -t' '
制表符位于引号之间。
解决方案 12:
使用 sed 将所有空格替换为下划线或文件中其他位置不包含的任何其他字符。然后排序,然后将下划线替换回空格:
sed 's/ /_/g' input | sort -k3nr | sed 's/_/ /g' > output
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件