Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
237 views
in Technique[技术] by (71.8m points)

csv - How to create a logic that substract results of two awk logics?

I need help to subtract 2 of the awk result below. Could someone give me an insight?

  1. Find the total of rows filtered by the specified word in 12th column
  2. Find the total of rows filtered by the specified word in 12th column and has the specified date in column 13
  3. Subtract 1 and 2 and print the result

This solves problem 1

awk -F ',' '$12 ~ /<WORD>/ {count++} END {print count}' file.csv

This solves problem 2

awk -F ',' '$12 ~ /<WORD>/ && $13 ~ /<DATE>/ {count2++} END {print count2}'  file.csv

Unfortunately, I'm not getting the result for problem 3 below.

awk -F ',' '$12 ~ /<WORD>/ {count++} END {print count}' file.csv; awk -F ',' '$12 ~ /<WORD>/ && $13 ~ /<DATE>/ {count2++} END {print count2}'  file.csv; awk {print $count-$count2}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If you run multiple awk commands, the variables used are not shared. If you want them to be shared, you could combine the commands into a single program:

awk -F ',' '
    $12 ~ /<WORD>/ {count++}
   '$12 ~ /<WORD>/ && $13 ~ /<DATE>/ {count2++}
   END {print $count-$count2}
' file.csv

However, your three specifications seem to simplify to:

print the number of the rows of a csv file file.csv which contain a specific word in column 12 and which do not contain a specific date in column 13

awk -F, '$12~/word/ && $13!~/date/ {n++} END {print n+0}' file.csv

where /word/ and /date/ are regular expressions that provide the required word and date respectively.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...