The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
Google UNIX.COM


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here.

Reply
 
Submit Tools LinkBack Thread Tools Search this Thread Display Modes
  #15  
Old 02-03-2008
drl's Avatar
drl drl is offline
Registered User
 

Join Date: Apr 2007
Location: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Posts: 556
Hi.

OK, let us assume that we can easily get rid of the commas.

Then we are left with one line that contains a list of numbers, each separated from the next by a blank character. We have an arranging program -- sort -- that orders lines. What transformation would get those two ideas together? What do we need to do? ... cheers, drl
Reply With Quote
Forum Sponsor
  #16  
Old 02-03-2008
Registered User
 

Join Date: Jul 2007
Posts: 28
drl,

Are you saying I need to get each of the numbers into a separate line?
Reply With Quote
  #17  
Old 02-03-2008
Registered User
 

Join Date: Sep 2006
Posts: 1,580
Code:
#!/bin/sh
s="12-13 15-18 23-28 36-38 42-43 53-56 70-72 76 80-86 93-110 119-128"
echo $s | awk '
{
  for (i=1;i<=NF;i++){
    n=split($i,a,"-")
    for (j=a[1];j<=a[n];j++){
        printf  "%d " ,j  
    }
    print ""
  }
}'
output:
Code:
# ./test.sh
12 13
15 16 17 18
23 24 25 26 27 28
36 37 38
42 43
53 54 55 56
70 71 72
76
80 81 82 83 84 85 86
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
119 120 121 122 123 124 125 126 127 128
Reply With Quote
  #18  
Old 02-03-2008
drl's Avatar
drl drl is offline
Registered User
 

Join Date: Apr 2007
Location: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Posts: 556
Hi.
Quote:
Originally Posted by Kweekwom View Post
drl,

Are you saying I need to get each of the numbers into a separate line?
Yes, exactly! Then, presumably, you'd want to put them back together again. Here's one way to do that:
Code:
#!/bin/bash3 -

# @(#) user2    Demonstrate eval and tr.

# echo "Input first set of nodes"

# read node1 # This is where you insert the string of numbers
# node1="435-437,476-492 70-72,76,80-86"
node1="435-437 476-492 70-72 76 80-86"

result=`echo $node1 | sed -r -e 's/([0-9]+)-([0-9]+)[ ]*/{\1..\2} /g'`

echo {1..5}

eval echo $result |
tee t1 |
tr '[, ]' '\n' |
tee t2 |
sort -n |
tr '\n' ' '
echo

exit 0
Producing:
Code:
% ./user2
1 2 3 4 5
70 71 72 76 80 81 82 83 84 85 86 435 436 437 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492
The tee allows you to look at the intermediate form of the data. See the man pages for details on the rest. The tr especially often varies from system to system.

That's part of the design of *nix -- put general tools together to solve specific problems.

Best wishes ... cheers, drl
Reply With Quote
  #19  
Old 02-03-2008
Registered User
 

Join Date: Jul 2007
Posts: 28
Wow drl, that's really cool. It works just as I need it to! I'll definitely delve deeper into those commands so I can understand them better. Thanks so much for your help!
Reply With Quote
  #20  
Old 02-03-2008
drl's Avatar
drl drl is offline
Registered User
 

Join Date: Apr 2007
Location: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Posts: 556
Hi.
Quote:
Originally Posted by Kweekwom View Post
... Thanks so much for your help!
You're welcome.

If you get a chance, awk, as in the solution that ghostdog74 posted, is worthwhile to learn. It breaks up input lines into fields, which can then be re-arranged, deleted, assigned to, etc. Very useful, and, once you get the idea of:
Code:
  pattern-part { action-part }
you can do a lot with very little work ... cheers, drl
Reply With Quote
  #21  
Old 02-03-2008
rikxik's Avatar
Registered User
 

Join Date: Dec 2007
Posts: 105
Just for fun:

Code:
$ input="34-40 10-20 4-8"

$ output=$(echo $input |perl -nae '$,=$\=" "; print foreach(sort {$a<=>$b} map( {s/-/../g ; eval $_ } @F))')

$ echo $output
4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 20 34 35 36 37 38 39 40
Reply With Quote
Google The UNIX and Linux Forums
Reply

Tags
linux

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes




All times are GMT -7. The time now is 06:53 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0