nev*_*int 169 unix linux sorting tab-delimited
我有一个格式如下的数据:
foo<tab>1.00<space>1.33<space>2.00<tab>3
Run Code Online (Sandbox Code Playgroud)
现在我尝试逐渐根据最后一个字段对文件进行排序.我尝试了以下命令,但它没有像我们预期的那样排序.
$ 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'
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
这是样本数据.
Lar*_*eth 298
使用bash,这将解决这个问题:
$ sort -t$'\t' -k3 -nr file.txt
Run Code Online (Sandbox Code Playgroud)
注意单引号字符串前面的美元符号.您可以在bash手册页的ANSI-C引用部分中阅读它.
laa*_*lto 10
默认情况下,字段分隔符为非空白到空白转换,因此选项卡应该可以正常工作.
但是,列是索引基数1和基数0,所以你可能想要
sort -k4nr file.txt
Run Code Online (Sandbox Code Playgroud)
按列4以相反顺序对file.txt进行数字排序.(虽然问题中的数据甚至有5个字段,所以最后一个字段是索引5).
小智 5
您需要在 -t\ 之后放置一个实际的制表符,并在 shell 中执行此操作,您可以按 ctrl-v 然后按制表符。我使用过的大多数 shell 都支持这种文字制表符输入模式。
但是要小心,因为从另一个地方复制和粘贴通常不会保留选项卡。