Sort multidimensional Array


Login or Register to Reply

 
Thread Tools Search this Thread
# 8  
Old 1 Weeks Ago
Quote:
Originally Posted by RudiC
Does reversing a sort key help?
Code:
$ IFS=$'\n'
$ echo "${!ENTRIES[*]}" | sort -t, -k1,1n -k2r | while read IX; do printf "%-15s%-15s\n" $IX ${ENTRIES[$IX]}; done
205,IP         111.122.133.20 
205,HOST2      unas           
205,HOST1      unas15533      
205,COMMENT    # UNAS         
775,IP         111.122.133.77 
775,HOST2      wlan           
775,HOST1      15533-wlan     
775,COMMENT    # WLAN Access Point
1015,IP        111.122.133.101
1015,HOST2     rdp1           
1015,HOST1     15533-rdp1     
1015,COMMENT   # RDP-Terminal 1
1025,IP        111.122.133.102
1025,HOST2     rdp2           
1025,HOST1     15533-rdp2     
 1025,COMMENT   # RDP-Terminal 2

Don't forget to reset your IFS afterwards.


EDIT: or, even better to get HOST1 and 2 in the right order:

Code:
echo "${!ENTRIES[*]}" | sort -t, -k1,1n -k2,2.2r -k2.3 | while read IX; do printf "%-15s%-15s\n" $IX ${ENTRIES[$IX]}; done

Your method is not working, this is what i get back
Code:
414,IP         205,HOST1
205,HOST2      414,COMMENT
505,HOST2      505,IP
505,HOST1      1025,COMMENT
775,COMMENT    1015,IP
1025,IP        775,IP
505,COMMENT    205,COMMENT
410,IP         775,HOST1
1015,HOST2     1015,HOST1
775,HOST2      410,HOST1
1015,COMMENT   410,HOST2
414,HOST1      414,HOST2
1025,HOST2     1025,HOST1
410,COMMENT    205,IP

This methode from nezabudka even works better. this sorts my array correct
Code:
shuf -e ${!ENTRIES[@]} | sort -V | while read d; do echo $d=${ENTRIES[$d]}; done

my only problem is now how to get the this entrys in this output order
Code:
# IP - HOST1  - HOST2 - COMMENT

# 9  
Old 1 Week Ago
Did you set the IFS variable as indicated?
Try the sort keys given with netzabudka's proposal as well.
This User Gave Thanks to RudiC For This Post:
Marti95 (1 Week Ago)
# 10  
Old 1 Week Ago
Quote:
Originally Posted by RudiC
Did you set the IFS variable as indicated?
Try the sort keys given with netzabudka's proposal as well.
Oh it was my fault. Its working of course as well. Thank you

So know i dont understand (my bash skills are very low) how to get this in a file line by line in this format
Code:
# IP - HOST1  - HOST2 - COMMENT

Like this
Code:
10.155.33.20              unas15533              unas      # Comment
10.155.33.101             15533-rdp1             rdp1      # Comment
10.155.33.102             15533-rdp2             rdp2      # Comment

I know how to create the file and how to write in it but i dont understand how i can use your funtion to geht this
# 11  
Old 1 Week Ago
Try paste:
Code:
echo "${!ENTRIES[*]}" | sort -t, -k1,1n -k2,2.2r -k2.3 | while read IX; do printf "%s\n" ${ENTRIES[$IX]}; done | paste -sd"\t\t\t\n"
111.122.133.20     unas15533     unas    # UNAS
111.122.133.77     15533-wlan    wlan    # WLAN Access Point
111.122.133.101    15533-rdp1    rdp1    # RDP-Terminal 1
111.122.133.102    15533-rdp2    rdp2    # RDP-Terminal 2

Aside: How did you create those arrays? Mayhap all this messing around could be avoided, and your output correctly computed in the first place?

Last edited by RudiC; 1 Week Ago at 06:02 AM..
This User Gave Thanks to RudiC For This Post:
Marti95 (1 Week Ago)
# 12  
Old 1 Week Ago
Code:
shuf -e ${!ENTRIES[@]} | sort -t, -k1,1n -k2,2.2Vr |

--- Post updated at 14:02 ---

And so it works
sort -t, -k1,1n -k2,2.2r
This User Gave Thanks to nezabudka For This Post:
Marti95 (1 Week Ago)
# 13  
Old 1 Week Ago
Quote:
Originally Posted by RudiC
Try paste:
Code:
echo "${!ENTRIES[*]}" | sort -t, -k1,1n -k2,2.2r -k2.3 | while read IX; do printf "%s\n" ${ENTRIES[$IX]}; done | paste -sd"\t\t\t\n"
111.122.133.20     unas15533     unas    # UNAS
111.122.133.77     15533-wlan    wlan    # WLAN Access Point
111.122.133.101    15533-rdp1    rdp1    # RDP-Terminal 1
111.122.133.102    15533-rdp2    rdp2    # RDP-Terminal 2

Aside: How did you create those arrays? Mayhap all this messing around could be avoided, and your output correctly computed in the first place?
Thank you so much

This works perfect for me:
Code:
IFS=$'\n'
echo "${!ENTRIES[*]}" | sort -t, -k1,1n -k2,2.2r -k2.3 | while read IX; do printf "%-20s\n" ${ENTRIES[$IX]}; done | paste -sd"\t\t\t\n"

Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Multidimensional array annacreek Shell Programming and Scripting 4 08-19-2018 12:44 AM
Multidimensional array:awk error genome Shell Programming and Scripting 7 12-07-2017 11:23 AM
How to deal with multidimensional array in awk? Akshay Hegde Shell Programming and Scripting 5 03-28-2013 04:19 AM
SQL database call into Multidimensional Array using Perl Script eazyeddie22 UNIX and Linux Applications 3 01-04-2012 12:48 AM
gawk - How to loop through multidimensional array? trey85stang Shell Programming and Scripting 5 10-03-2011 02:02 PM
Multidimensional arrays and sort. sepoto Programming 2 01-30-2011 09:41 AM
Multidimensional array of strings with vector. sepoto Programming 5 12-29-2010 05:22 PM
multidimensional array in awk ahmedwaseem2000 Shell Programming and Scripting 2 09-20-2010 08:23 PM
perl-data from file save to multidimensional array pp-zz Shell Programming and Scripting 1 07-29-2010 11:11 AM
Perl help: Creating a multidimensional array of subdirectories and its contents shwang3 Shell Programming and Scripting 6 04-06-2010 03:03 AM
multidimensional array using c++ vector carl.alv Programming 0 04-16-2009 04:27 AM
C programming working with multidimensional array littleboyblu Programming 6 03-14-2009 05:44 AM
AWK multidimensional array sinpeak Shell Programming and Scripting 4 12-17-2008 02:58 AM
Awk multidimensional Array user_prady Shell Programming and Scripting 1 09-01-2008 11:50 PM
multidimensional array in perl prkfriryce Shell Programming and Scripting 9 12-01-2007 03:33 PM