【发布时间】:2025-12-06 09:35:01
【问题描述】:
我有一些 .gz 文件,里面有一个 .csv(逗号分隔)文件。
我正在使用一个 php 文件,我试图在其中提取文件,然后将数据导入 mysql 的表中。
.csv 文件的第二列的日期格式为Y-m-d(例如2015-10-08)。
在导入.csv文件的数据之前,我需要删除Y-m-d这种格式下第二列不是日期的行。
如果行在第二个字段中没有此格式下的日期,则表示这些行包含我不需要的不相关数据。看下图:
[![在此处输入图片描述][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 文件。
【问题讨论】:
-
最好贴一些样本输入,否则我们会盲目检查
-
@fedorqui 我相信现在它很好。我不必将 csv 文件作为 n 图像上传。我的代码适用于第一列。当日期在第二列时,我想让它工作。所以,我的问题在这里: sed \'/^
-
我仍然想念您的 .sql 文件的一些示例行。我们唯一知道的是第二列是日期。那么分隔符是什么? edit 并显示出来。
-
@fedorqui 我希望它适用于逗号或制表符分隔的文件。在这个例子中,我想让它以逗号分隔。然后很容易转换我猜的代码。我将不得不将 ',' 更改为 '\t'