如何按标签字段对文本文件进行排序?

如何按标签字段对文本文件进行排序?

我有一个行格式如下的文件:

<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 删除数字参数。

相关内容