我在一个目录中有许多具有相同结构的CSV文件。
现在要说的是,我想解析这些行并计算预定义值数组a = [A, B, C, D]
中第5列的行数。
我对shell脚本非常缺乏经验,所以awk
是这样做的方式,还是我应该选择python
脚本?
答案 0 :(得分:2)
使用这个awk one liner:
awk '$5 ~ /^(A|B|C|D)$/' *.csv
迭代当前目录中所有.csv
个文件的所有行,并检查第5列($5
)是否匹配(~
)模式^(A|B|C|D)$
。如果线条匹配模式awk将打印整行。我们没有指定一个动作,但打印整行是awk的默认动作。
模式:
^
匹配字符串的开头,$
匹配字符串的结尾。因此,模式从开始到结束匹配。 (A|B|C|D)
表示可能值的选择,例如其他编程语言中的逻辑OR
操作。我在您的问题中使用了单个字符A,B,C,D
,但您可以自由使用(foo|bar|hello|world)
之类的内容。
答案 1 :(得分:2)
另一个当前发布的答案会进行RE比较,这几乎肯定不是你真正想要的(如果你想要的值之一是.*
,请尝试)。
这是一个字符串比较:
awk '
BEGIN{ split("A B C D",tmp); for (i in tmp) a[tmp[i]] }
$5 in a { cnt++ }
END { print cnt+0 }
' file