解析提取某些值但不是全部的CSV文件

时间:2010-05-19 04:13:16

标签: php csv parsing fgetcsv

美好的一天,

我有一个本地csv文件,其值每天都会更改,名为DailyValues.csv
我需要提取category2和category4的值字段 然后从提取的值中组合,排序和删除重复项(如果有) 然后将其保存到新的本地文件NewValues.txt。

以下是DailyValues.csv文件的示例:

category,date,value  
category1,2010-05-18,value01  
category1,2010-05-18,value02  
category1,2010-05-18,value03  
category1,2010-05-18,value04  
category1,2010-05-18,value05  
category1,2010-05-18,value06  
category1,2010-05-18,value07  
category2,2010-05-18,value08  
category2,2010-05-18,value09  
category2,2010-05-18,value10  
category2,2010-05-18,value11  
category2,2010-05-18,value12  
category2,2010-05-18,value13  
category2,2010-05-18,value14  
category2,2010-05-18,value30  
category3,2010-05-18,value16  
category3,2010-05-18,value17  
category3,2010-05-18,value18  
category3,2010-05-18,value19  
category3,2010-05-18,value20  
category3,2010-05-18,value21  
category3,2010-05-18,value22  
category3,2010-05-18,value23  
category3,2010-05-18,value24  
category4,2010-05-18,value25  
category4,2010-05-18,value26  
category4,2010-05-18,value10  
category4,2010-05-18,value28  
category4,2010-05-18,value11  
category4,2010-05-18,value30  
category2,2010-05-18,value31  
category2,2010-05-18,value32  
category2,2010-05-18,value33  
category2,2010-05-18,value34  
category2,2010-05-18,value35  
category2,2010-05-18,value07

我在http://www.php.net/manual/en/function.fgetcsv.php找到了一些有用的解析示例,并设法提取值列的所有值,但不知道如何限制它只提取category2 / 4的值然后排序和清理重复。

解决方案需要是php,perl或shell脚本。

非常感谢任何帮助 提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个shell脚本解决方案。

egrep 'category4|category2' input.file | cut -d"," -f1,3 | sort -u > output.file

我使用cut命令只是为了向您显示您只能提取某些列,因为切换的f开关选择了您想要提取的列。

排序u开关使输出唯一。

编辑: 使用egrep而非grep非常重要,因为grep使用的是有限制的正则表达式集,而且egrep有更多的设施

编辑(对于只有grep可用的人):

grep 'category2' input.file > temp.file && grep 'category4' input.file >> temp.file && cut temp.file -d"," -f1,3 | sort -u > output.file && rm temp.file

它产生了相当大的开销,但仍有效......