如果第二列格式不是sed

时间:2015-11-10 14:53:29

标签: php mysql sed

我有一些.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文件。

1 个答案:

答案 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文件一起使用