awk saving field of first file into array


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk saving field of first file into array
# 8  
Old 12-11-2012
Code:
awk 'NR==FNR{ if ($2~/\$/) {sub(/\$/,"",$2); if (/paid/) {a[$1]+=$2} ;if (/due/) a[$1]-=$2}}
    NR>FNR{printf "%s balance:$%.2f \n",$1,a[$1]+0}' file2 file1

CoCo balance:$-10.65
Hiel balance:$50.00
Euda balance:$-12.45
SJHF balance:$0.00

This User Gave Thanks to rdcwayx For This Post:
# 9  
Old 12-11-2012
Is there a way to make it so order of file input become file1 file2?
# 10  
Old 12-11-2012
But what's the reason to put file1 first?
This User Gave Thanks to rdcwayx For This Post:
# 11  
Old 12-11-2012
It is a requirement :\
Oh, I also manage to make any line that contain no decimal points or has less than two or more than two digits after decimal points fail.

Last edited by RozenKristal; 12-11-2012 at 02:30 AM..
# 12  
Old 12-11-2012
Quote:
Originally Posted by RozenKristal
It is a requirement :\
I am not clear what kind of this requirement it is.

Here we are not doing any thing to files so that it will impact any thing..

still for your requirement try..

Code:
awk 'NR==FNR{A[$0]=0;next}
    {if(A[$1] != ""){if($2 ~ /\$/){sub("\\$","");s=$2;if($3 == "due"){s=0-$2};A[$1]=A[$1]+s}}}END{
    for(i in A){printf "%s balance:$%.2f \n", i,A[i]}}' file1 file2

SJHF balance:$0.00
CoCo balance:$-10.65
Euda balance:$-12.45
Hiel balance:$50.00

Quote:
Originally Posted by RozenKristal
Oh, I also manage to make any line that contain no decimal points or has less than two or more than two digits after decimal points fail.
and i assume you want $2 number like 25.35 only..

then try...

Code:
awk 'NR==FNR{A[$0]=0;next}
    {if(A[$1] != ""){if($2 ~ /\$/ && $2 ~ /[0-9][0-9].[0-9][0-9]$/){sub("\\$","");s=$2;if($3 == "due"){s=0-$2};A[$1]=A[$1]+s}}}END{
    for(i in A){printf "%s balance:$%.2f \n", i,A[i]}}' file1 file2

SJHF balance:$0.00
CoCo balance:$-10.65
Euda balance:$-12.45
Hiel balance:$0.00

This User Gave Thanks to pamu For This Post:
# 13  
Old 12-11-2012
Quote:
Originally Posted by pamu
I am not clear what kind of this requirement it is.

Here we are not doing any thing to files so that it will impact any thing..

still for your requirement try..

Code:
awk 'NR==FNR{A[$0]=0;next}
    {if(A[$1] != ""){if($2 ~ /\$/){sub("\\$","");s=$2;if($3 == "due"){s=0-$2};A[$1]=A[$1]+s}}}END{
    for(i in A){printf "%s balance:$%.2f \n", i,A[i]}}' file1 file2

SJHF balance:$0.00
CoCo balance:$-10.65
Euda balance:$-12.45
Hiel balance:$50.00

and i assume you want $2 number like 25.35 only..

then try...

Code:
awk 'NR==FNR{A[$0]=0;next}
    {if(A[$1] != ""){if($2 ~ /\$/ && $2 ~ /[0-9][0-9].[0-9][0-9]$/){sub("\\$","");s=$2;if($3 == "due"){s=0-$2};A[$1]=A[$1]+s}}}END{
    for(i in A){printf "%s balance:$%.2f \n", i,A[i]}}' file1 file2

SJHF balance:$0.00
CoCo balance:$-10.65
Euda balance:$-12.45
Hiel balance:$0.00

Yep, that exactly how I made somechange to it. Thank you, I really appreciate you guys' help,
# 14  
Old 12-11-2012
Code:
awk '{A[$1]} $2~/\./ && sub(/\$/,x,$2){A[$1]+=($3=="paid"?$2:-$2)}  END{for(i in A)printf "%s balance: $%.2f\n",i,A[i]}' file1 file2


Last edited by Scrutinizer; 12-11-2012 at 03:51 AM.. Reason: did not leave out invalid input
This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk Associative Array and/or Referring to Field by String (Nonconstant String Value)

I will start with an example of what I'm trying to do and then describe how I am approaching the issue. File PS028,005 Lexeme HRS # M # PhraseType 1(1:1) 7(7) PhraseLab 501 503 ClauseType ZYq0 PS028,005 Lexeme W # L> # BNH # M #... (17 Replies)
Discussion started by: jvoot
17 Replies

2. Shell Programming and Scripting

awk to print array that occurs the most with matching value in another field

In the below awk I am splitting $7 on the : and then counting each line or NM_xxxx. If the $1 value is the same for each line then print the $7 that occurs the most with the matching $1 value. The awk seems close but I am not sure what is going on. I included a description as well as to what I... (1 Reply)
Discussion started by: cmccabe
1 Replies

3. Shell Programming and Scripting

Perl - use search keywords from array and search a file and print 3rd field when matched

Hi , I have been trying to write a perl script to do this job. But i am not able to achieve the desired result. Below is my code. my $current_value=12345; my @users=("bob","ben","tom","harry"); open DBLIST,"<","/var/tmp/DBinfo"; my @input = <DBLIST>; foreach (@users) { my... (11 Replies)
Discussion started by: chidori
11 Replies

4. Shell Programming and Scripting

How to split file into multiple files using awk based on 1 field in the file?

Good day all I need some helps, say that I have data like below, each field separated by a tab DATE NAME ADDRESS 15/7/2012 LX a.b.c 15/7/2012 LX1 a.b.c 16/7/2012 AB a.b.c 16/7/2012 AB2 a.b.c 15/7/2012 LX2 a.b.c... (2 Replies)
Discussion started by: alexyyw
2 Replies

5. Shell Programming and Scripting

awk assign output of array to specific field-number

With this script i want to print the output to a specific field-number . Can anybody help? awk 'NR=FNR{split(FILENAME,fn,"_");nr=$2;f = $1} END{for (i=1;i<=f;i++) print i,$fn=nr}' input_5.csv input_6.csvinput_5.csv 4 135 5 185 6 85 11 30input_6.csv 1 90 3 58 4 135 7 60 8 55 10... (1 Reply)
Discussion started by: sdf
1 Replies

6. Shell Programming and Scripting

Saving file content in arrays using AWK

Hi, im new to shell scripting. i have a query for which i have searched your forums but coulndt get what i need. i have a file that has two records of exactly the same length and format and they are comma seperated. i need to save the first and the second columns of the input file to 2 different... (11 Replies)
Discussion started by: atikan
11 Replies

7. Shell Programming and Scripting

perl, put one array into many array when field is equal to sth

Hi Everyone, #!/usr/bin/perl use strict; use warnings; my @test=("a;b;qqq;c;d","a;b;ggg;c;d","a;b;qqq;c;d"); would like to split the @test array into two array: @test1=(("a;b;qqq;c;d","a;b;qqq;c;d"); and @test2=("a;b;ggg;c;d"); means search for 3rd filed. Thanks find the... (0 Replies)
Discussion started by: jimmy_y
0 Replies

8. Shell Programming and Scripting

saving values in file in an array in awk

hi i am trying to save values in a file in an array in awk..the file is as follows: 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0, so far i have this: awk 'BEGIN {RS="\n";FS=","} { for(i=1;i<=NR;i++) { for(j=1;j<=NF;j++) { a=$j; } } (4 Replies)
Discussion started by: npatwardhan
4 Replies

9. Shell Programming and Scripting

saving values from awk expression into shell array

hi i am trying to save the values i extract from a file with the help of awk in a bash shell array. i have: exec 10<file2 while read LINE <&10; do ARRAY1=$(awk '{print $1}' file2) ((count++)) done echo ${ARRAY1} it prints just blank lines. file1 has two columns and i... (4 Replies)
Discussion started by: npatwardhan
4 Replies

10. Shell Programming and Scripting

saving awk value in a bash array variable

hi all i am trying to save an awk value into an array in bash: total=`awk '{sum+=$3} END {print sum}' "$count".txt"` ((count++)) the above statement is in a while loop.. $count is to keep track of file numbers (1.txt,2.txt,3.txt,etc.) i get the following error: ./lines1:... (1 Reply)
Discussion started by: npatwardhan
1 Replies
Login or Register to Ask a Question