编写脚本将7列修剪为5列(csv文件)


Script to trim 7 columns to 5 ( csv file )

如何通过运行某种脚本将这7列精简为5列。

我记得你可以使用regex/php来做这件事,但如果我能回忆起我们是如何做的,那就麻烦了

示例代码(GEO IP数据库(115000条线路)

"3231296768","3231297023","ripencc","702518400","EU","EU","European Union"
"3231297024","3231297279","ripencc","441763200","EU","EU","European Union"
"3231297280","3231297535","ripencc","702518400","EU","EU","European Union"
"3231297536","3231297791","ripencc","702518400","EU","EU","European Union"
"3231297792","3231298047","ripencc","702518400","EU","EU","European Union"
"3231298048","3231298303","ripencc","702518400","EU","EU","European Union"
"3231298304","3231298559","ripencc","702518400","EU","EU","European Union"

我需要从每行中删除第3列和第4列。

感谢您的帮助。

虽然jimw的答案通常是最好的答案,但如果你想要一个纯PHP解决方案,我建议如下:

$input = 'input.txt';
$output = 'output.txt';
if (false !== ($ih = fopen($input, 'r'))) {
    $oh = fopen($output, 'w');
    while (false !== ($data = fgetcsv($ih))) {
        // this is where you build your new row
        $outputData = array($data[0], $data[1], $data[4], $data[5], $data[6]);
        fputcsv($oh, $outputData);
    }
    fclose($ih);
    fclose($oh);
}

根据"排序脚本"answers"regex/PHP",我推断您只想完成这项工作,而不在乎使用什么语言。如果您使用*nix:

cut -d, -f1,2,5,6,7 file.csv

"cut"是一个标准的unix命令行实用程序,可以在从OSX到AIX的所有应用程序中找到。我使用的论点是:

-d, # this sets the 'delimiter' to a comma, for CSV
-f1,2,5,6,7 # this selects which fields to print

因此,它合并成一个文件,其中每一行都由逗号分隔的字段组成,并打印出其中的一到五个字段

在任何编程语言中都可以达到同样的效果。我对PHP不是很了解,所以我不会尝试用PHP制作它。

编辑:来自PHP文档,略有调整:

function apply_quotes($string) {
  return '"'.$string.'"';
}
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $data = array_map("apply_quotes", $data);
        echo join(",", array($data[0], $data[1], $data[4], $data[5], $data[6]))."'n";
    }
    fclose($handle);
}