Sorting alphanumeric strings without a pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sorting alphanumeric strings without a pattern
# 22  
Old 06-22-2012
Quote:
Originally Posted by silver18
Is it possible to reproduce the "sort by name" windows option?
You know, Windows doesn't seem to have the magical ability to consistently handle inconsistently named files either. I'm always running into corners where it guesses wrong too.

Could you not just rename the inconsistent files and solve the problem permanently?
# 23  
Old 06-22-2012
Quote:
Originally Posted by silver18
I don't know how to do it, but sorting with two keys should work...
I'm not sure what you mean by that.

I can think of ways that may end up working with the filenames you've posted, but it will choke on lots of other inconsistent filenames. A general solution would need the ability to actually analyze the names for the pattern, and figure out what to do with exceptions...
# 24  
Old 06-22-2012
All I have now is a way of sorting files IF the folder contains only one name pattern.

Sure I can provide user input to guide the sorting process, but I'd prefer not to do it.

Why sorting using two keys isn't a good idea?
Getting the first character and use it to sort means I can sort files with a two steps process.
(this means file names differs from the first character: 03_XXX, 10_XXX, a_XXX... But, as 99,5% of files I need to sort are like that, this could work...)
# 25  
Old 06-25-2012
Sorting by two keys:
Code:
sed 's/\(.*[^0-9]\)\([0-9][0-9]*\)/\1 \2 &/' infile | sort -k1,1 -k2,2n|cut -d" " -f3-

# 26  
Old 06-25-2012
Thanks a lot for your reply!
I came to the very same solution!
Now, I need something more...
is there a way of dinamically add keys to sort?
I mean:
I can count the number of columns in a file. I need, then, to sort that file using:
Quote:
sort -k1,1 ...... -kN,N
where N is the number of columns.
Is there a way, maybe a while loop, to add keys to sort command?

Thanks!!!
# 27  
Old 06-25-2012
Hi.

This solution-comparison will not be useful if one must use busybox or similar, but for people who can acquire and make available codes, the msort solution seems simple and produces a result that appeals to me:
Code:
#!/usr/bin/env bash

# @(#) s3	Demonstrate sed-sort-cut with msort-hybrid.

pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C sed sort cut msort

FILE=${1-data5}
pl " Input file $FILE:"
head -20 $FILE

# Results sed, sort, cut.
sed 's/\(.*[^0-9]\)\([0-9][0-9]*\)/\1 \2 &/' $FILE |
sort -k1,1 -k2,2n |
cut -d" " -f3- > f1

# Results, msort hybrid.
msort -q -l -n 1,1 -c hybrid $FILE > f2

pl " Compare (sed,sort,cut) and msort-hybrid:"
paste <( cat f1 ) <( cat f2 ) |
align -g5

exit 0

producing:
Code:
% ./s3

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0.8 (lenny) 
bash GNU bash 3.2.39
sed GNU sed version 4.1.5
sort (GNU coreutils) 6.10
cut (GNU coreutils) 6.10
msort 8.44

-----
 Input file data5:
03_003.png
03_009.png
03_007.png
03_006.png
03_004-005.png
03_010.png
03_000a.jpg
03_002.png
03_001.png
03_000b.jpg
Credits10.png
03_008.png
03_000c.jpg
Credits11.png

-----
 Compare (sed,sort,cut) and msort-hybrid:
03_000a.jpg		03_000a.jpg
03_000b.jpg		03_000b.jpg
03_000c.jpg		03_000c.jpg
03_001.png		03_001.png
03_002.png		03_002.png
03_003.png		03_003.png
03_006.png		03_004-005.png
03_007.png		03_006.png
03_008.png		03_007.png
03_009.png		03_008.png
03_010.png		03_009.png
03_004-005.png		03_010.png
Credits10.png		Credits10.png
Credits11.png		Credits11.png

See link in previous post for some details about msort.

Personally, I think I would seriously consider renaming files consistently (possibly assisted by symbolic links) and be done with it.

Best wishes ... cheers, drl

Last edited by drl; 06-25-2012 at 10:55 AM..
# 28  
Old 06-25-2012
Thanks a lot, but, unfortunately, I must use busybox...Smilie

I'm now trying to do something different...

This is the input:

Code:
xxxholic02_c07_000.png
xxxholic02_c07_001.png
xxxholic02_c07_002.png
xxxholic02_c07_003.png
xxxholic02_c07_004.png

And I would like to have this output:

Code:
x 02 07 000 xxxholic02_c07_000.png
x 02 07 001 xxxholic02_c07_001.png
x 02 07 002 xxxholic02_c07_002.png
x 02 07 003 xxxholic02_c07_003.png
x 02 07 004 xxxholic02_c07_004.png

This means:
- getting the first character of each line
- getting every numeric field of each line

I managed to do it this way:
Code:
sed 's/\(.\{1\}\).*/\1/' infile > outfile1
sed "s/[^0-9]*\([0-9][0-9]*\)[^0-9]*/ \1/g;s/^[^0-9][^0-9]*$/-1/" infile | sed 's/^ *//' > outfile2

than, I used the paste command to join outfile1 and outfile2...
Problem is, I don't have paste on Kindle...

Is there any way of doing those sed commands appending results to original file so that I don't need to paste them?

Thanks!!!Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Include strings between a pattern

Hi, I have two files: File1: sample statements1 <UID = " " PWD = " "> sample statements2 File2: UID ="admin" PWD ="password" (6 Replies)
Discussion started by: manid
6 Replies

2. Shell Programming and Scripting

Sorting content between match pattern and move on with awk and sed

S 0.0 0.0 (reg, inst050) k e f d c S 0.0 0.0 (mux, m030) k g r s x v S 0.0 0.0 (reg, inst020) q s n m (12 Replies)
Discussion started by: ctphua
12 Replies

3. UNIX for Dummies Questions & Answers

Want to sort a file which contains alphanumeric strings

I want to sort a file which contains alphanumeric string. bash-3.00$ cat abc mtng1so mtng2so mtng11so mtng9so mtng23so mtng7so hstg2so hstg9so hstg1so hstg11so hstg13so bash-3.00$ Want output like this, using one liner. hstg1so (1 Reply)
Discussion started by: Raza Ali
1 Replies

4. Shell Programming and Scripting

Sorting block of lines based on specified strings

Below is the part of contents of a file cat outputFile.txt :APP-MS-service_monitoring-118054-DiskFilling-S Description=Disk is getting filled. If Condition=If Event/Log Level(ANY) and matching substring &quot;DiskFilling&quot; Log: xx.x.x..xx.: 4 days 1:33:54.42 Date and time=03-18-2013... (2 Replies)
Discussion started by: vivek d r
2 Replies

5. Shell Programming and Scripting

Sorting strings in reverse order

Hello, I have a large database of words and would like them sorted in reverse order i.e. from the end up. An example will make this clear: I have tried to write a program in Perl which basically takes the string from the end and tries to sort from that end but it does not seem... (5 Replies)
Discussion started by: gimley
5 Replies

6. UNIX for Dummies Questions & Answers

Sorting of alphanumeric filenames..

Hi All, I want sort following files in ascending order. exp_installer_CC4160-file10.dmp exp_installer_CC4160-file11.dmp exp_installer_CC4160-file12.dmp exp_installer_CC4160-file13.dmp... (3 Replies)
Discussion started by: gramakrishna
3 Replies

7. Programming

Sorting a vector of strings into numerical order.

I have a vector of strings that contain a list of channels like this: 101,99,22HD,432,300HD I have tried using the sort routine like this: sort(mychans.begin(),mychans.end()); For some reason my channels are not being sorted at all. I was hoping someone might have some input that might... (2 Replies)
Discussion started by: sepoto
2 Replies

8. Shell Programming and Scripting

Sorting with non- and alphanumeric characters

Hi guys, I'm new to this forum and I'm not a UNIX expert. I can't figure out this certain problem i'm having: I need to sort some words, some of the words are annotations (enclosed within < and >). I need to have them sorted alphabetically with all non-alphanumeric characters up front. For... (2 Replies)
Discussion started by: fed.m.ang
2 Replies

9. UNIX for Advanced & Expert Users

alphanumeric Sorting

Hi , I have a requirement where one column have to be sorted (delimiter is pipe) for eg: My input filed is as below 1|FIAT|0010103|23011|01/01/2000|31/12/9999|1.15 2|232|613|1 2|234|743|1 2|234|793|1 2|234|893|1 1|FIAT|0010103|23012|01/01/2000|31/12/9999|1.15 2|230|006|0 2|230|106|0... (9 Replies)
Discussion started by: laxmi131
9 Replies

10. Shell Programming and Scripting

shell program for sorting strings in an alphabetical order

Hi, I trying to find the solution for writing the programming in unix by shell programming for sorting thr string in alphabetical order. I getting diffculty in that ,, so i want to find out the solution for that Please do needful Thanks Bhagyesh (1 Reply)
Discussion started by: bp_vanarse
1 Replies
Login or Register to Ask a Question