我有一个行格式如下的文件:
<something> <file_name> type:file <something> size:<filesize> <something>
我想根据标签“size:”标识的字段“filesize”对其进行数字排序。通常传递给排序程序的简单键数字/偏移量不起作用,因为没有严格的分隔符 - “size:”标签前可以出现多个空格 - 例如在“file_name”中。有没有办法使用前面的标签作为字段标识符从命令行进行排序?
答案1
如果 's 中没有冒号<something>
,则可以说:
sort -t : -Vk 3 file
答案2
如果没有样本的话很难回答。
尝试类似的方法(可以在线,如果最后一个字符是 | 则不需要 \ )
awk '{for(i=1;i<=NF;i++)
if ( substr($i,1,5) == "size:" ) { print substr($i,6) " " $0 ; next ; }}' file |
sort -n | awk '{$1="" ; print } '
基本上
- 首先 awk 搜索 size 字段,并将其放在前面
- 使用数字参数排序
- 最后 awk 删除数字参数。