Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1
- 2
- 3
- 2 2 2 1 2
- 3 6 1 2 4
- 4 1 1 2 3
- 6 3 3 3 4
- #!/usr/local/bin/awk -f
- {
- ## FNR is the line number of the current file, NR is the number of
- ## lines that have been processed. If you only give one file to
- ## awk, FNR will always equal NR. If you give more than one file,
- ## FNR will go back to 1 when the next file is reached but NR
- ## will continue incrementing. Therefore, NR == FNR only while
- ## the first file is being processed.
- if(NR == FNR){
- ## If this is the first file, save the values of $1
- ## in the array n.
- n[$1] = 0
- }
- ## If we have moved on to the 2nd file
- else{
- ## If the 3rd field of the second file exists in
- ## the first file.
- if($3 in n){
- ## Add the value of the 5th field to the corresponding value
- ## of the n array.
- n[$3]+=$5
- }
- }
- }
- ## The END{} block is executed after all files have been processed.
- ## This is useful since you may have more than one line whose 3rd
- ## field was specified in the first file so you don't want to print
- ## as you process the files.
- END{
- ## For each element in the n array
- for (i in n){
- ## print the element itself and then its value
- print i,":",n[i];
- }
- }
- $ chmod a+x foo.awk
- $ ./foo.awk file1 file2
- 1 : 7
- 2 : 2
- 3 : 4
- awk '
- (NR == FNR){n[$1] = 0; next}
- {if($3 in n){n[$3]+=$5}}
- END{for (i in n){print i,":",n[i]} }' file1 file2
- awk '
- NR == FNR {n[$3] += $5; next}
- {print $1 ": " n[$1]}' file2 file1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement