sorting question


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers sorting question
# 1  
Old 09-15-2007
sorting question

How can I sort lines in a file in a consistent, user-defined way that is not alphabetical, numeric, or patterned in any other way (e.g., sort a bunch of 5 line files to always print lines 2,5,3,4,1)? Thanks in advance.
# 2  
Old 09-15-2007
Hi.

Here is a brute-force way for this particular situation:
Code:
#!/usr/bin/env bash

# @(#) s1       Demonstrate arbitrary ordering.

set -o nounset
echo

debug="echo"
debug=":"

SEQ=/usr/bin/seq

## Use local command version for the commands in this demonstration.

version bash $SEQ

echo

# 2,5,3,4,1
cat >data1 <<EOF
Expected last.
Expected first.
Expected third.
Expected fourth.
Expected second.
EOF

# See discussion of bash arrays at:
# http://www.tldp.org/LDP/abs/html/arrays.html

oldIFS="$IFS"
IFS="
"
array=( $(cat data1) )
IFS="$oldIFS"

last=$(( ${#array[*]} ))
echo " Input data:"
for i in $( $SEQ 1 $last )
do
  j=$(( i-1 ))
  $debug " printing element $j"
  echo ${array[${j}]}
done

echo
echo " Ordered data:"
for i in 2 5 3 4 1
do
  j=$(( i-1 ))
  $debug " printing element $j"
  echo  "${array[${j}]}"
done

exit 0

Producing:
Code:
% ./s1

GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
seq (coreutils) 5.2.1

 Input data:
Expected last.
Expected first.
Expected third.
Expected fourth.
Expected second.

 Ordered data:
Expected first.
Expected second.
Expected third.
Expected fourth.
Expected last.

See man pages and tldp reference for details ... cheers, drl
# 3  
Old 09-15-2007
You can try this:

Code:
awk '
   BEGIN { split("2 5 3 4 1", my_sort) }
         { rows[NR]=$0 }
   END   { for (row in rows) print rows[my_sort[++i]] }
' input_file.txt

# 4  
Old 09-15-2007
Awesome - thank you both very much.
# 5  
Old 09-15-2007
Hi.

This is longer than robotronic's excellent awk script, but shows how it can be done in perl:
Code:
#!/usr/bin/perl

# @(#) p1       Demonstrate arbitrary ordering.

use warnings;
use strict;

my ($debug);
$debug = 1;
$debug = 0;

my ( @content, @order, $t1 );

# Define ordering.

@order = qw/ 2 5 3 4 1 /;
print STDERR " Output order = '@order'\n" if $debug;
my ($order_length) = scalar @order;

# Read entire file into an array.

@content = <>;

print "\n";
print " Input data:\n";
print @content;
my ($lines) = scalar @content;

if ( $order_length > $lines ) {
  warn(" Lines in file less than ordering, output will be incomplete.\n");
}

# Print according to specified order.

print "\n";
print " Output result:\n";
foreach my $i (@order) {
  if ( defined( $t1 = $content[ $i - 1 ] ) ) {
    print $t1;
  }
  else {
    print STDERR " ( Element $i skipped.)\n";
  }
}

print STDERR " ( Lines read: $lines )\n";

exit(0);

Producing:
Code:
% ./p1 data1

 Input data:
Expected last.
Expected first.
Expected third.
Expected fourth.
Expected second.

 Output result:
Expected first.
Expected second.
Expected third.
Expected fourth.
Expected last.
 ( Lines read: 5 )

It warns when the file contains fewer lines than the ordering ... cheers, drl
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Question about sorting -- how to pass an array to a function

Hi, guys I just wanted to sort the elements of an array ascendingly. I know the following code does work well: array=(13 435 8 23 100) for i in {0..4} do j=$((i+1)) while ] do if } -le ${array} ]] then : else min=${array} ${array}=${array} ${array}=$min fi... (5 Replies)
Discussion started by: franksunnn
5 Replies

2. UNIX for Dummies Questions & Answers

Quick Question: Sorting

Hi fellow linuxers I have a quick question... I would like to sort the numbers in each line that are within a file, and I want to sort them so that the numbers in each line go from SMALLEST to HIGHEST. For example, my file looks like this: 6 4 2 3 1 5 7 8 15 16 11 13 12 14 20 18 19 17 24 26... (7 Replies)
Discussion started by: lucshi09
7 Replies

3. Shell Programming and Scripting

sorting

Hi all, Does anyone can help me the following question? I would like to write an AWK script. In the following input file, each number in "start" is paired with numbers in column "end". No Start End A 22,222,33,22,1233,3232,44 555,333,222,55,1235,3235,66... (7 Replies)
Discussion started by: phoeberunner
7 Replies

4. Shell Programming and Scripting

Sorting HELP

Hi, I have posted related topic but as i continue the research I find more need to sort the data. AS(2607:f278:4101:11:dead:beef:f00f:f), AS786 AS6453 AS7575 AS7922 AS(2607:f2e0:f:1db::16), AS786 AS3257 AS36252 AS786 AS3257 AS36252 AS(2607:f2f8:1700::2), AS786 AS6939 AS25795 ... (6 Replies)
Discussion started by: sam127
6 Replies

5. UNIX for Advanced & Expert Users

HELP on sorting

hi everyone, I am kind of new to this forum. I need help in sorting this data out accordingly, I am actually doing a traceroute application and wants my AS path displayed in front of my address like this; 192.168.1.1 AS28513 AS65534 AS5089 AS5089 .... till the last AS number and if possible... (1 Reply)
Discussion started by: sam127
1 Replies

6. UNIX for Dummies Questions & Answers

Sorting help

i have list of files: Wang De Wong CVPR 09.pdf Yaacob AFGR 99 Second edition.pdf Shimon CVPR 01.pdf Den CCC 97 long one.pdf Ronald De Bour CSPP 04.pdf ..... how can i sort this directory so the output will be in the next format: <year>\t<conference/journal>\t<author list> - t is tab (its... (1 Reply)
Discussion started by: nirnir26
1 Replies

7. UNIX for Dummies Questions & Answers

Sorting question

i have list of files: Wang CVPR 09.pdf Yaacob AFGR 99.pdf Shi CVPR 04.pdf ..... how can i sort with single line this directory so the output will be in the next format: <year>\t<conference/journal>\t<author list> - t is tab (its sort by the year) example: 1999 CVIU ... (2 Replies)
Discussion started by: nirnir26
2 Replies

8. Shell Programming and Scripting

sorting question......

HI, I have been racking my brain for a while on this..... was hoping one of the guru's could point me in the right direction.... Basically I have the following data in a file : ---- 2009-01-01 10665 Begin 02:25:23 2009-01-02 10665 Begin 20:54:11 2009-01-03 10665 Begin 05:31:17... (4 Replies)
Discussion started by: mashy
4 Replies

9. Shell Programming and Scripting

Sorting Question

Hi All I have a CSV file where 3rd and 4th fields are date and time it's a session log file printing the date and time per session Now, I want to create a statistics of how many sessions per date and Time I managed a script for sessions per hour Code: #!/bin/bash #This Shell Script... (3 Replies)
Discussion started by: The Owl
3 Replies

10. UNIX for Dummies Questions & Answers

Noob sorting question

Ok here is the deal, I have a command given to me by some systems guy who I cannot get ahold of on the weekend without paying him alot of money to help me. I need to get this done before Monday as I am just getting pummeled by DOS attacks. The comand given was.... netstat -ntu | awk '{print... (1 Reply)
Discussion started by: Hexabah
1 Replies
Login or Register to Ask a Question