8

Using Notepad++ v6.6.8 with TextFX.

How do I sort lines in numeric order rather than alphanumeric?

That is I want lines to sort like:

1
2
10
11
15
20

not:

1
10
11
15
2
20
5
  • I'm pretty sure it doesn't do either without a plugin. Are you using TextFX?
    – krowe
    Sep 8, 2014 at 0:18
  • @krowe yes I have TextFX and I'm using TextFx->TextFX Tools->Sort lines case insensitive (at column)
    – User
    Sep 8, 2014 at 0:25
  • I just noticed that my version is way out of date. Line sorting was added to 6.5.2 without a plugin according to the release notes: notepad-plus-plus.org/news/notepad-6.5.2-release.html
    – krowe
    Sep 8, 2014 at 1:04
  • @krowe This feature using not numeric order. Sep 9, 2014 at 19:08
  • @crazypotato Check below, I've already suggested a plugin which does.
    – krowe
    Sep 9, 2014 at 21:15

4 Answers 4

8

This is now easy to achieve (at least in Notepad++ 7.5.9):

Use the menu item: Edit -> Line Operations -> Sort Lines As Integers Ascending

(Note if you don't select any text it will sort the entire file, and if you select text it constrains the sorting to the selected text.)

1
  • You have to ensure that lines are separated with EOL current settings (Edit -> EOL...). I had Linux separator, but the EOL was set to Windows one. So everything was considered as one line. Jan 31, 2023 at 21:29
4

I don't know what your file looks like, but I'd use regular expressions to add spaces or zeros before each number to make them the same length (e.g. 2 becomes 002). Then they will sort correctly and you can use another replacement to strip the leading spaces/zeros afterwards.

These are the steps (works for number up to 10 characters)

Find: ^ Replace: 0000000000

Find: \d*(\d{10}) Replace: \1

Sort

Find: ^0* Replace:

It works by adding 10 zeros before the number, even though that's probably too much. The second replacement than takes the last 10 digits of the number to bring everything back to the same length, giving you numbers like 0000000839, 0000000003 etc. Those will sort in the order you want them to sort. Once sorted the last expression will strip all leading zeros so you'll have your original numbers back.

If you need longer numbers just add more zeros to the first replacement, and increase the 10 in the second replacement accordingly. If you're going to do this more often you could record a macro with these steps.

8
  • 1
    This is painful. More easy use sort from UnxUpdates.zip sort -n in.txt>out.txt Sep 8, 2014 at 1:22
  • Fur such simple things tool should make it in one step. If need more steps then better use another tool. Sep 8, 2014 at 1:36
  • I agree with both of you, the question was specifically about notepad++ though. And recording it into a macro will make it a single step again.
    – AVee
    Sep 8, 2014 at 7:12
  • So where actual answer with steps? I will like to see it cause i not sure how i can make regex depend on length string. Sep 8, 2014 at 13:28
  • I've added the steps, personally I'd use sort -n but if this is part of a common workflow it might make sense to create a macro to do this so you won't have to leave Notepad++
    – AVee
    Sep 8, 2014 at 18:28
1

I haven't tried this but there is a plugin which claims to do this (as long as the lines BEGIN with a number). Here is the link: http://www.scout-soft.com/linesort/

Update Ok, that plugin is apparently gone for now. Maybe it doesn't work with newer NP++ versions. Here is another one which I've seen in the plugin manager so it is at least more common: http://william.famille-blum.org/blog/index.php?entry=entry110123-113226

I just tried it on 6.6.9 and it is a little awkward (don't forget to hit the Add button on the dialog) but works perfectly well.

3
  • I saw that; ultimately I may try it although I'd prefer to use a vetted solution. Installing random dll's that don't have a large consenus use is not my ideal
    – User
    Sep 8, 2014 at 0:42
  • Actually turns out I don't think the dll is even downloadable I get a 404
    – User
    Sep 8, 2014 at 0:53
  • @User See my update.
    – krowe
    Sep 8, 2014 at 1:13
0

Select all and copy as text to Excel or other spreadsheet program, use custom sort. Each line should paste as a single cell, A1, B1, etc. Just need to set the field as numeral not text. This is done by setting cell format, or using TEXT function. Paste back to notepad++.

In the more complex case that OP has text mixed with numbers (e.g., "1 First line," "12 Twelfth line"), we can create a sort column to organize the list. Since there is a space after the number, we can find that space to create a column with just the numbers using =LEFT(A1,FIND(" ",A1,1)). After spreading the function to the whole column, we can sort both columns based on the sort column order (i.e., numeric order) and then copy the first column back in the right order. The exact formula to rip the line number will depend on the line format, but the above command should work with minor modification for most cases, otherwise stack exchange has further examples of similar formulas.

3
  • 1
    Isn't text going to create the problem described in the question?
    – fixer1234
    Aug 31, 2016 at 18:31
  • No, just need to set the field as numeral not text. This is done by setting cell format, or using TEXT function. Assuming OP has text mixed with numbers (e.g., "1 First line," "12 Twelfth line"), we can create a sort column to organize the list. Since there is a space after the number, we can find that to create a column with just the numbers using =LEFT(A1,FIND(" ",A1,1)). After spreading the function to the whole column, we can sort both columns based on the sort column order (i.e., numeric order) and then copy the first column back in the right order.
    – J Vook
    Sep 2, 2016 at 3:41
  • 1
    Yeah I thought so too in my original reply but then I realized OP was asking for sorting whole lines, not just the numbers.
    – J Vook
    Sep 4, 2016 at 14:34

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .