如何在 NP++ 中对行进行本地排序

问题描述 投票:0回答:1

有没有人在notepad++里遇到这样的排序问题?

文本文件包含以下行

0.00000E+00    0.00000E+00    1    4.89402E-02
0.00000E+00    0.00000E+00    3    9.41098E+01
0.00000E+00    0.00000E+00    5    4.22547E+03
0.00000E+00    0.00000E+00    2    7.41087E-06
0.00000E+00    0.00000E+00    4    2.69642E-03
0.00000E+00    0.00000E+00    6    5.35888E-04
0.30000E+02    0.30000E+02    1    2.96322E-02
0.30000E+02    0.30000E+02    3    1.15594E+02
0.30000E+02    0.30000E+02    5    3.30169E+03
0.30000E+02    0.30000E+02    2    7.86962E-03
0.30000E+02    0.30000E+02    4    7.54210E+00
0.30000E+02    0.30000E+02    6    2.03730E+02
0.60000E+02    0.60000E+02    1    4.60685E-03
0.60000E+02    0.60000E+02    3    1.46504E+02
0.60000E+02    0.60000E+02    5    1.31320E+03
0.60000E+02    0.60000E+02    2    4.81953E-04
0.60000E+02    0.60000E+02    4    9.01484E+00
0.60000E+02    0.60000E+02    6    8.16669E+01
0.90000E+02    0.90000E+02    1    7.26858E-05
0.90000E+02    0.90000E+02    3    1.55457E+02
0.90000E+02    0.90000E+02    5    2.43385E+02
0.90000E+02    0.90000E+02    2    3.59327E-03
0.90000E+02    0.90000E+02    4    4.52146E-04
0.90000E+02    0.90000E+02    6    1.65717E-02
0.12000E+03    0.12000E+03    1    7.07527E-03
0.12000E+03    0.12000E+03    3    1.46518E+02
0.12000E+03    0.12000E+03    5    1.30634E+03
0.12000E+03    0.12000E+03    2    6.14906E-03
0.12000E+03    0.12000E+03    4    8.93463E+00
0.12000E+03    0.12000E+03    6    8.16950E+01
...

我需要在第 3 列将行排序到本地 1~6

0.00000E+00    0.00000E+00    1    4.89402E-02
0.00000E+00    0.00000E+00    2    7.41087E-06
0.00000E+00    0.00000E+00    3    9.41098E+01
0.00000E+00    0.00000E+00    4    2.69642E-03
0.00000E+00    0.00000E+00    5    4.22547E+03
0.00000E+00    0.00000E+00    6    5.35888E-04
0.30000E+02    0.30000E+02    1    2.96322E-02
0.30000E+02    0.30000E+02    2    7.86962E-03
0.30000E+02    0.30000E+02    3    1.15594E+02
0.30000E+02    0.30000E+02    4    7.54210E+00
0.30000E+02    0.30000E+02    5    3.30169E+03
0.30000E+02    0.30000E+02    6    2.03730E+02
...

我试图找到什么: ^(( +\d.\d+E[+|-]\d+){2}) +1(( +-?\d.\d+E[+|-]\d+){1}) ^(( +\d.\d+E[+|-]\d+){2}) +3(( +-?\d.\d+E[+|-]\d+){1}) 替换为:1 ....

但是我认为没有用的标签太多了。

notepad++
1个回答
0
投票

有没有人遇到这样的问题用notepad++排序

我不得不承认:我有时会使用 Notepad++ 来完成此类任务,当时我懒得写

awk
sed
python
脚本。如果任务变得有点复杂,那么真正的脚本语言或电子表格是唯一的方法。

但是取决于你有多少行(比如几千而不是一百万)这个技巧可能值得在 Notepad++ 中尝试:

  1. 做一个 Schwartzian 变换,即应用一个正则表达式,将 每行开头的排序列:
    • 查找内容:
      (([0-9.]+E[-+][0-9]+[ ]+){2})([1-6])(.*)
    • 替换为
      \3 : \1\3\4
  2. 到第一行,第一个字符,记录一个宏:
    • 宏 -> 开始录制:
    • 标记六行:(按住shift并同时按六次Cursor Down)
    • 选择“编辑 -> 行操作 -> 将行按整数升序排序
    • 按下光标一次(取消选择六行并转到下一个六行块的开头)
    • 宏 -> 停止录制
  3. 回放宏无数次次:
    • 按 Ctrl-Shift-P 并按下 KEEP 键以遍历文件中的所有行
    • 这可能听起来很傻,它需要你按住按键一段时间,但它会在每千行几秒钟内完成你所需要的
  4. 撤消 Schwartzian 变换:
    • 用空字符串替换
      [1-6] : 

诀窍是:

  1. 通过将排序字段放在前面使文件更适合任务
  2. 录制宏
  3. 使用键盘快捷键根据需要应用宏
  4. 撤消步骤 1

需要第一步,以便我们可以使用宏菜单中的排序功能。

© www.soinside.com 2019 - 2024. All rights reserved.