我有一堆记录明智的格式化(.csv)文件。第一个字段是整数,也可以为空。所有的文件都是这样。我想计算每个文件中第一个字段为空的记录的数量,然后绘制所有文件的计数图。
filename.csv文件格式:
123456,few,other,fields
,few,other,fields
234567,few,other,fields
我想要像
这样的东西awk -F, '$1==""' `ls` | (for each file separately wc -l) | gnugraph ( y axis as output of wc -l command and x axis as simply 1 to n where n is number of csv files)
我面临的问题是wc -l
只对所有文件一起执行一次。我想为每个文件运行wc -l
,并计算具有空第一个字段的记录的数量,并将此计数序列提供给gnugraph
命令。一旦我得到了每个文件所需的计数,我就几乎完成了
seq 10 | gnuplot -p -e "plot '<cat'"
没问题
您可以使用awk
来跟踪数组中每个文件的计数。然后在最后打印数组的内容:
awk '$1==""{a[FILENAME]+=1} END{for(file in a) { print file, a[file] }}' `ls`
这样你就不用纠结于wc
而直接将内容放到gnuplot
使用示例:
$> cat file1
,test
2,test
3,
$> cat file2
,test
2,test
3,
,test
$> awk -F"," '$1==""{a[FILENAME]+=1} END{for(file in a) { print file, a[file] }}' `ls`
file1 1
file2 2
使用gawk可以使用BEGINFILE
和ENDFILE
:
$ awk -F, '$1==""{++i} BEGINFILE{i=0} ENDFILE{print FILENAME, i}' file1 file2
file1 3
file2 1
如果您想为每个文件分别运行wc -l
,则必须设置一个循环。
类似-
的内容for i in `ls`
do
awk -F, '$1==""' "$i" | wc -l
done | gnugraph
对于第一个字段,使用grep
$ grep -c '^,' file{1..3}
file1:1
file2:2
file3:4
我把你的文件复制到file1,并在file2和file3分别加倍