linux - 根据字符串中的特定值进行排序。

标签 linux bash shell sorting scripting

我有一个包含如下内容的文件:

    666500872101_002.log
    738500861101_003.log
    738500861101_002.log
    666500872101_001.log
    741500881101_001.log
    738500861101_001.log
    741500881101_002.log
    666500872101_003.log
    741500881101_003.log
    666500872101_004.log

我需要首先根据字段 5 到 8 中的值(即 741500881101_003.log)对行进行排序,然后根据日志的部件号(即 741500881101_003.log 以获得如下内容:

738500861101_001.log
738500861101_002.log
738500861101_003.log
666500872101_001.log
666500872101_002.log
666500872101_003.log
666500872101_004.log        
741500881101_001.log
741500881101_002.log
741500881101_003.log

使用sort无法获得任何好的结果,请帮忙。

最佳答案

您可以使用带有以下选项的sort命令:

sort -n -k1.5,1.8 -n -k1.14,1.16 fileToSort.log

选项:

  • -n 用于数字排序
  • -k1.5,1.8-k1.14,1.16 定义排序键

示例:

$ sort -n -k1.5,1.8 -n -k1.14,1.16 fileToSort 
738500861101_001.log
738500861101_002.log
738500861101_003.log
666500872101_001.log
666500872101_002.log
666500872101_003.log
666500872101_004.log
741500881101_001.log
741500881101_002.log
741500881101_003.log

关于linux - 根据字符串中的特定值进行排序。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284502/

相关文章:

linux - Bash:如何检查是否只有一个 root id 并且所有用户 UID 都是唯一的?

bash - 通过 sed 有条件地通过管道输出

bash - 如何覆盖 pushd 和 popd 对 dirs 的自动调用?

java - 如何使用 Bourne Shell 将输入从 Java 程序传输到另一个程序

java - 关闭项目属性时添加项目库报错?

linux - 我如何 grep 出相同模式的多行?

python - 如何使用 Py2Neo 修复 Linux 上的 IncompleteRead 错误

c - 我的 C 程序在树莓派上创建了 4Gb 的文件,而它们的大小应该是 8 字节

php - 使用PHP exec()加速后端的可行性

bash - 一行命令清空终端中的多个文本文件