Andrew Tsay
Andrew Tsay

Reputation: 1953

How do you implement an array into an AWK expression?

I am writing a script, and I have delimited file that looks like this.

1|Anderson|399.00|123                                  
2|Smith|29.99|234                                  
3|Smith|98.00|345                                   
4|Smith|29.98|456                                   
5|Edwards|399.00|567  
6|Kreitzer|234.56|456

Here's an awk statement that will grab all the values in column one of a row that contain "Smith".

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; print $1}' customer)

The output would be:

2 3 4

How could I make it so I am also inputting the values into an array as awk increments. I tried this:

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; arr[count]=$1; print $1}' customer)

Edit: Later into the script, when I type

echo ${array[1]} 

nothing outputs.

Upvotes: 1

Views: 191

Answers (3)

Andrew Tsay
Andrew Tsay

Reputation: 1953

Found an easy solution. Set the output of awk into a variable. Then turn the variable into an array.

list=$(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; print $1}' customer)

array=($list)

Typing:

echo ${array[1]}

Will give you the second entry in the array

Upvotes: 0

anubhava
anubhava

Reputation: 785186

Your question is not very clear. Looking for something like this?

awk -F "|" '$2=="Smith" {arr[count++]=$1}
            END {n=length(arr); for (i=0;i<n;i++) print (i+1), arr[i]}' in.file

OUTPUT

1 2
2 3
3 4

Upvotes: 0

Barun
Barun

Reputation: 2652

Your code seems to be right! Perhaps, I might haven't got your question correctly?

I slightly enhanced your code to print the values stored in the array at the end of execution. Also, there is a print statement just before the values are printed.

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; arr[count]=$1; print $1} END { print "Printing the inputs"; for (i in arr) print  arr[i] }' customer)
2 3 4 Printing the inputs 2 3 4

Further, look at this site for more examples.

Upvotes: 1

Related Questions