2011-06-01 45 views
1

我真的是新的bash,我試圖在csv文件列中搜索一個值,然後添加一個計數器。我在網上發現它,但它打印它,我一直在計算一個R出現多少次,而不是打印整個事情。Bash腳本搜索csv文件列並計數值顯示的次數

awk -F "\"*,\"*" '{print $2}' $file 

CSV文件是這樣的:

12345,R,N,N,Y,N,N,N,Bob Builder 

我在列尋找R 2.任何人都可以點我在正確的方向?

回答

4

以下應做你想做的(其中FILE.CSV是CSV文件):

區分大小寫版本:

cut -f 2 -d , file.csv | grep -c R 

不區分大小寫版本:

cut -f 2 -d , file.csv | grep -ic R 

說明

cut -f 2 -d , file.csv 這需要file.csv的每一行並提取指定的字段。 -f 2選項表示提取字段2,而-d ,表示使用','作爲字段分隔符。然後輸出到grep

grep -c R這將查找包含'R'的行。由於它通過了​​前面的cut命令的內容,因此它在字段2中尋找'R'。 -c選項意味着統計匹配行的數量。

+0

謝謝你soo ..這工作完美...你能解釋它是如何工作的? – John 2011-06-01 13:23:18

+1

你應該使用grep -c而不是管道到wc -l :) – Flash 2011-06-01 13:24:17

+0

@Andrew謝謝你指出我愚蠢的錯誤。更正。 – 2011-06-01 13:34:25

2

只用awk:

awk -F "\",\"" '{if ($2 == "R") cnt++} END{print cnt}' file 
+0

+1避免不必要的管道多個命令,並在awk中完成所有這些。 – anubhava 2011-06-01 13:32:46

1

一個有趣的 - Perl的只有 - 這算應有盡有。

perl -F, -anle 'map{$cnt{$_}{$F[$_]}++}0..$#F;END{print $cnt{1}{R}}'