Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

I have a CSV file with values like the following:

col1,col2,col3,col4,col5,col6,col7
1,0,0,0,0,BTS,Active
4,5,3,1,1,LocalMode,Offlne
1,2,5,6,3,PermFault,Offline
1,2,6,6,2,BSC,Active
7,8,2,3,2,NE,Offline
1,7,6,5,2,BSC,Active

I want to fetch the values rows from this CSV file in such a way that the following sample conditions are met:

1) if (col7="Active" ) then sum of col1 values from all the rows

2) if (col6 == somevalue && column5 != somevalues) then sum of col1 values from all the rows.

I am able to fetch the rows from CSV file based on one column values which meets my first condition with the following awk command:

awk -F, '$7 == "Active" { print }' test.csv

How can i use multiple conditions in this awk command which checks multiple column values as mentioned in above sample condition 2 where i need to check present of some specific text in col6 and at the same time i need to ignore some keywords from column5. Is there a better and easier way of doing this instead of awk?

share|improve this question

1 Answer 1

From The AWK Programming Language:

The simplest awk program is a sequence of pattern-action statements:
pattern { action }
pattern { action }
...

So, you can try following:

awk -F, '$7 == "Active" { x += $1; }; $6 == "value6" && $5 != value5 { y += $1; }; END { print x, y; }' file
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.