![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here. |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#15
|
||||
|
||||
|
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 |
| Forum Sponsor | ||
|
|
|
#16
|
|||
|
|||
|
drl,
Are you saying I need to get each of the numbers into a separate line? |
|
#17
|
|||
|
|||
|
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 ""
}
}'
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 |
|
#18
|
||||
|
||||
|
Hi.
Quote:
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
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 That's part of the design of *nix -- put general tools together to solve specific problems. Best wishes ... cheers, drl |
|
#19
|
|||
|
|||
|
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!
|
|
#20
|
||||
|
||||
|
Hi.
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 }
|
|
#21
|
||||
|
||||
|
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
|
||||
| Google The UNIX and Linux Forums |