{
  "slug": "csv-filter",
  "name": "gizza-ai/csv-filter",
  "version": "0.1.0",
  "title": "CSV Filter — Filter Rows by Condition Online — gizza.ai",
  "description": "Keep only the CSV rows that match a condition (e.g. age > 30, city == NYC, name contains al) — numeric or string, in your browser. Free, private, no upload.",
  "tags": [
    "csv filter",
    "filter rows",
    "csv where",
    "query csv",
    "csv condition"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/csv-filter/",
    "markdown": "https://gizza.ai/tools/csv-filter/index.md",
    "descriptor": "https://gizza.ai/tools/csv-filter/tool.json",
    "deep_link_example": "https://gizza.ai/tools/csv-filter/?data=name%2Cage%0AAlice%2C30%0ABob%2C25&condition=age%20%3E%2028&header=true&delimiter=%2C"
  },
  "cli": "gizza tool csv-filter \"name,age\nAlice,30\nBob,25\" 'condition=age > 28'",
  "tool": {
    "description": "Keep only the CSV rows where a column matches a condition. `condition` is '<column> <op> <value>' with op one of == != < <= > >= contains; the column is a header name (when header=true) or a 1-based index. Comparison is numeric when both the cell and value are numbers, otherwise string; contains is a case-insensitive substring. The header row is preserved.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "condition": {
          "description": "Row condition '<column> <op> <value>'. column is a header name (header=true) or 1-based index; op is one of == != < <= > >= contains. Numeric compare when both sides are numbers, else string; contains is a case-insensitive substring.",
          "type": "string"
        },
        "data": {
          "description": "The CSV text to filter.",
          "type": "string"
        },
        "delimiter": {
          "default": ",",
          "description": "Field separator: a single char or 'comma'/'tab'/'semicolon'/'pipe'. Default ','.",
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Treat the first row as a header (kept, and matchable by name). Default true.",
          "type": "boolean"
        }
      },
      "required": [
        "data",
        "condition"
      ],
      "type": "object"
    }
  }
}