Sort and vectors on awk


 
Thread Tools Search this Thread
# 1  
Sort and vectors on awk

Well,

i have a script and it makes a txt like this :

Code:
Caps 12
cans 9
cols 10

my print line is something like this

Code:
for(i in a)
                print i, a[i];

i have to order the txt from higher to low like:

Code:
Caps 12
cols 10
cans 9


and i have two questions:

- is there a way to sort before printing?

- how can you sort a[i] because i refers to a value not a position (i its not < or > because it will be Caps, Cols or Cans), and i cannot change it like in java or c when you do something like this:

Code:
for (i = 0; i < X.length; i++)
{
for (j = i; j < X.length-1; j++)
{
if (X[j] > X[j+1])
{
aux = X[j];
X[j] = X[j+1];
X[j+1] = aux;
}
}
}

but in this case i is a position or a value?, im so confused about this way to use vectors, if someone can explain a little or give me documentation about vectors in awk /unix i will apreciate it.

thanks for all
# 2  
It helps if you tell us what Linux /UNIX you are using. Some awk implementations have asort() which is array sort. Other do not - so the correct answer for you depends on the system you are on.
# 3  
The mawk man page has an example of a string array sort.
# 4  
im on aix
# 5  
Here are three ways to sort your array that should work even if you don't have gawk:
Code:
awk '{  # Read the input file in to array a.
        a[$1] = $2
}       
END {   # Use the sort utility to print array a in sorted order.
        print "print | sort:"
        cmd = "sort -k2nr" # Sort 2nd field as a numeric value in reverse order
        for(i in a) print i, a[i] | cmd
        close(cmd)

        # Copy a into b and c using an insertion sort to keep b and c sorted as
        # entries are added.
        for(k in a) {
                b[++nc] = k
                c[nc] = a[k]
                for(i = nc; i > 1; i--)
                        if(c[i] > c[i - 1]) {
                                tmp = b[i - 1]
                                b[i - 1] = b[i]
                                b[i] = tmp
                                tmp = c[i - 1]
                                c[i - 1] = c[i]
                                c[i] = tmp
                        } else  break;
        }
        print "print sorted b and c"
        for(i = 1; i <= nc; i++) print b[i], c[i]

        # Loop through original array printing and deleting the largest value.
        # This loop destroys the array as it prints it.
        print "print largest value in loop:"
        for(i = 1; i <= NR; i++) {
                max = 0
                for(j in a) if(a[j] > max) {
                        max = a[j]
                        mj = j
                }
                print mj, a[mj]
                delete a[mj]
        }
}' file.txt

On Solaris/SunOS systems, use /usr/xpg4/bin/awk or nawk instead of awk. On AIX or any other UNIX or Linux system, this should be fine as shown.

With your sample input, this awk script produces:
Code:
print | sort:
Caps 12
cols 10
cans 9
print sorted b and c
Caps 12
cols 10
cans 9
print largest value in loop:
Caps 12
cols 10
cans 9

# 6  
nawk - how to print variable value to a file?

Hi,

I have a shell script which uses an awk program inside. There is a variable $count inside an "if" loop which counts the no of iterations.

Now, how to print that $count value to file (or) how to export that value to a variable outside awk program. i.e, awk to shell ?

Please help.
# 7  
Quote:
Originally Posted by xshock
Hi,

I have a shell script which uses an awk program inside. There is a variable $count inside an "if" loop which counts the no of iterations.

Now, how to print that $count value to file (or) how to export that value to a variable outside awk program. i.e, awk to shell ?

Please help.
I don't see what this has to do with sorting in awk (or nawk).

Please start a new thread to discuss this new issue and provide example code that is not working for you. ($count in a shell script is very different from $count in awk and nawk. You print a value explicitly in awk and nawk with a call to print or printf. There are lots of ways to print data implicitly depending on what you're doing.)
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Science: Computers
Difficulty: Easy
Ada Lovelace is often considered the first computer programmer.
True or False?

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sort by first row - awk

how can i sort the table based on first row? thanks in advance input name d b c a l l1 l2 l3 l4 l1 1 2 3 4 l2 2 2 2 1 l3 1 1 2 2ouput name a b c d l1 l4 ... (4 Replies)
Discussion started by: quincyjones
4 Replies

2. Shell Programming and Scripting

Sort String using awk

Hi, I need help to sort string using awk. I don't want to use sed or perl as I want to add this functionality in my existing awk script Basically I have a variable in AWK which is string with comma separated value. I want to sort that string before using that variable in further processing for... (10 Replies)
Discussion started by: rocky.community
10 Replies

3. Shell Programming and Scripting

awk sort

input file abc1 abc23 abc12 abc15 output abc1 abc12 abc15 abc23 (9 Replies)
Discussion started by: yanglei_fage
9 Replies

4. Shell Programming and Scripting

match and sort using awk

Hello, Is it possible to do match and sort the data from two fields in a file using awk? Like for example: input apple cat in rat out sky cat pen rat ball sky cpu pen linux ball unix cpu paper linux phone unix paper phone (8 Replies)
Discussion started by: avatar_007
8 Replies

5. Shell Programming and Scripting

Using Awk to efficiently substitute values using 3 vectors

I'm trying to efficiently combine the fields of two vectors (vectors b and c) into a new vector (vector d) as defined by instructions from a 3rd vector (vector a). So vector a has either a 1 or 2 in each field specifying which vector (b or c respectively) should go into that field. Vector a is... (4 Replies)
Discussion started by: LaTortuga
4 Replies

6. Shell Programming and Scripting

Sort and count using AWK

Hi, I've a fixed width file where I need to count the number of patterns from each line between characters 1 to 15 . so can we sort them and get a count for each pattern on the file between 1 to 15 characters. 65795648617522383763831552 410828003265795648 6175223837... (5 Replies)
Discussion started by: rudoraj
5 Replies

7. Shell Programming and Scripting

Sort in AWK

Hi, I usually use Access to sort data however for some reason its not working. Our systems guys and myself cannot figure it out so ive tried to use AWK to do the sorting. The file is made up of single lines in the format ... (4 Replies)
Discussion started by: eknryan
4 Replies

8. Homework & Coursework Questions

awk sort help

1. The problem statement, all variables and given/known data: I dont know what I do wrong, I am trying to create shell programming database: I have this command first: && > $fname ... echo $Name:$Surname:$Agency:$Tel:$Ref: >> $fname then I have echo " Name Surname Agency Tel... (2 Replies)
Discussion started by: jeht
2 Replies

9. Shell Programming and Scripting

Help, awk sed sort

Hi,everyone: I'm new to shell, and now get trouble with some script: line=`/usr/xpg4/bin/awk '/^(*\|){2}'"$CR"'/ {print $0}' ${TIER4FILE}|grep -v OSNAME=`sed -n ''$LINE'p' $DATALOC/os` sort +1 /tmp/LhasaCRs2 > /tmp/LhasaCRs1 I cannot understand the "{2}" here. My mentor said it... (1 Reply)
Discussion started by: mycoy
1 Replies

Featured Tech Videos