我有一些.gz
个文件,里面有.csv
(逗号分隔)文件。
我正在使用php文件,我试图提取文件,然后在mysql中的表中导入数据。
.csv
个文件的第二列的日期格式为Y-m-d
(例如2015-10-08
)。
在导入.csv
文件的数据之前,我需要删除第二列不是此格式Y-m-d
的日期的行。
如果行在第二个字段中没有此格式的日期,则表示这些行具有我不需要的无关数据。查看下面的图片:
[![在此处输入图像说明] [1]] [1]
我设法使其工作,好像日期字段在第1列中。为了做到这一点,我只是编辑了文件而没有改变文件类型或其他任何东西。我使用的代码和它的工作原理如下:
$command = 'zcat '.str_replace(' ', '\ ',$filePath). '| sed \'/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/!d\' >' . str_replace(' ', '\ ',$tempFilename);
必须更改的部分是这一部分:
sed \'/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/!d\'
上面的这一行删除除了以2015-10-10格式开头的行之外的所有行。我不必检查该号码是否是实际日期,因为.csv文件没有任何其他信息。我尝试更改代码,使其适用于日期为的第二列:
sed \'/[^,]^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/!d\'
请注意,因为您可能会对我的代码中的某些符号感到困惑 - >该代码用于.php文件。
答案 0 :(得分:1)
类似{箴言18:2思考我,让其他人不被冒犯}
sed -n '/^[^,]*,[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/p'
虽然awk会更好地与csv文件一起使用