Partoska Laboratory
$ cisiviv1.0.1

Cisivi

Malý nástroj a knihovna jazyka C pro dotazy do souborů CSV na macOS, Linuxu a Windows. Dotazujte, filtrujte, řaďte a upravujte soubory CSV z příkazové řádky, takže vaše shellové skripty zvládnou čárky a zalomení řádků v uvozovkách bez cut nebo awk.

Dotazy do CSVKnihovna C99Open Source (MIT)macOS · Linux · Windows
cisivi — terminál

# Instalace přes npm (nebo Homebrew, Scoop, balíčky).

$ npm install -g @partoska/cisivi

# Přečtení jednoho sloupce.

$ cisivi name crew.csv
Kirk
Spock
McCoy, Leonard
Janeway

# Počet odpovídajících řádků.

$ cisivi -c -f ship=Enterprise . crew.csv
3

# Změna hodnoty v souboru.

$ cisivi -w -s Admiral -f name=Kirk rank crew.csv

Proč Cisivi?

Malý a bez závislostí

Jeden nástroj a jedna knihovna v C99, které potřebují jen standardní knihovnu C. Sestavíte je pomocí GCC, Clang nebo MSVC a poběží od Raspberry Pi až po počítač s Windows.

Ptejte se na to, co potřebujete

Vyžádejte si celou tabulku pomocí ., sloupce podle názvu nebo podle pozice pomocí #N, řádky pomocí [ROWS] nebo jednu hodnotu pomocí [0].name. Řádky lze počítat i od konce.

Filtrování a řazení

Pomocí parametru -f ponechte jen potřebné řádky: = pro text, < nebo >= pro čísla, ~ pro hledání uvnitř hodnoty. Seřaďte je pomocí --sort, čísla podle hodnoty.

Skutečné CSV, ne dělení řádků

Čárky v uvozovkách, zdvojené uvozovky i zalomení řádků uvnitř hodnot zůstanou v jednom poli. Počet z parametru -c i názvy sloupců z parametru -k počítají záznamy, ne řádky.

Výstup pro skripty i lidi

Vypište CSV, surové hodnoty po jedné na řádek, JSON pomocí parametru -j nebo zarovnanou tabulku pomocí parametru -t. Parametr -0 ukončuje hodnoty znakem NUL pro xargs -0.

Libovolný oddělovač

Pomocí parametru -F čtěte středníky, tabulátory nebo jakýkoli jiný znak a pomocí --output-delimiter zapisujte jiný. LF nebo CRLF, s řádkem záhlaví i bez něj.

Spojování více souborů

Zadejte více souborů a Cisivi je spojí v daném pořadí a sloupce spáruje podle názvu. Sloupec, který přibude v pozdějším souboru, se přidá a řádky bez něj ho nechají prázdný.

Nastavení, přidávání a mazání

Hodnoty nastavíte pomocí parametru -s, řádky přidáte nebo vložíte pomocí parametru -a a řádky nebo sloupce smažete pomocí parametru -d. Výsledek vypište, nebo ho pomocí parametru -w zapište zpět do souboru.

Návratové kódy pro skripty

0 nalezeno, 1 nenalezeno, 2 chyba použití nebo vstupu. Výstup ve formátu CSV zůstává platným CSV, připraveným pro další cisivi.

Připraveno pro AI agenty

Cisivi obsahuje skill pro AI agenty. Nainstalujete ho jedním příkazem a AI agenti pro programování, jako jsou Claude Code a Codex, pak umí dotazovat a upravovat vaše soubory CSV přesnými příkazy.

$ npx skills add partoska/cisivi
Získat skill Cisivi

Jeden nástroj, jedna knihovna

Příkaz cisivi je tenká vrstva nad knihovnou libcisivi. Příkaz použijte ve shellových skriptech a rourách, nebo knihovnu přilinkujte do vlastního programu v C.

Nástroj příkazové řádky

Čte soubory nebo standardní vstup, vypíše přesně to, co dotaz vybere, a upravuje hodnoty, řádky a sloupce. Je určený pro shellové skripty, Makefiles a CI úlohy.

$ cisivi -f ship=Voyager name crew.csv

Knihovna C

Čte a zapisuje CSV s volitelným záhlavím a libovolným oddělovačem, bez převodu typů. Zachovává pořadí řádků a sloupců ze souboru a sama nic nevypisuje: chyby ukládá do dokumentu i s číslem řádku.

#include <cisivi.h>

Rychlý start

Od instalace k dotazům a změně souboru CSV v pěti krocích.

  1. Nainstalujte cisivi

    Nainstalujte CLI a ověřte verzi. Dáváte přednost Homebrew, Scoop nebo nativnímu balíčku? Podívejte se na možnosti instalace.

    $ npm install -g @partoska/cisivi
    $ cisivi -V
  2. Vytvořte soubor CSV

    Zapište malou tabulku, na které dotazy vyzkoušíte. Její první řádek pojmenovává sloupce. Poslouží i jakýkoli existující soubor .csv s řádkem záhlaví.

    $ printf 'name,rank,age\nKirk,Captain,34\n"McCoy, Leonard",Doctor,52\nJaneway,Captain,41\n' > crew.csv
  3. Přečtěte sloupec

    Vypište hodnoty jednoho sloupce a pak celou tabulku jako zarovnanou tabulku. Čárka v uvozovkách zůstane ve své hodnotě.

    $ cisivi name crew.csv
    $ cisivi -t . crew.csv
  4. Filtrujte a řaďte

    Ponechte řádky, pro které platí všechny filtry, nebo řádky seřaďte a vezměte první.

    $ cisivi -f rank=Captain -f 'age>40' name crew.csv
    $ cisivi --sort-desc age '[0].name' crew.csv
  5. Změňte hodnotu

    Nastavte hodnotu v odpovídajících řádcích, pomocí parametru -w ji zapište zpět do souboru a pak ji přečtěte znovu.

    $ cisivi -w -s Admiral -f name=Kirk rank crew.csv
    $ cisivi -f name=Kirk rank crew.csv

Příklady

Vypište celou tabulku, sloupce podle názvu nebo pozice, řádky podle pozice nebo jednotlivé hodnoty. Záporné pozice se počítají od konce a [N:M] vezme řádky od N až před M. Pomocí parametru -i můžete u názvů sloupců ignorovat velikost písmen.

crew.csv
id,name,rank,age,ship1,Kirk,Captain,34,Enterprise2,Spock,Commander,35,Enterprise3,"McCoy, Leonard",Doctor,52,Enterprise4,Janeway,Captain,41,Voyager
$ cisivi . crew.csv
$ cisivi name crew.csv
$ cisivi name,ship crew.csv
$ cisivi '#1' crew.csv
$ cisivi '[-1].name' crew.csv
$ cisivi '[1:3].name,ship' crew.csv
$ cat crew.csv | cisivi -i NAME

Další možnosti najdete v dokumentaci.

Instalace

Vyberte způsob, který vyhovuje vašemu systému. Každá možnost nainstaluje stejný nástroj cisivi.

$ brew install partoska/tap/cisivi

Pro macOS a Linux na x64 a ARM64.

Příkazy používají nejnovější verzi 1.0.1. Všechny soubory a kontrolní součty SHA256 najdete na stránce vydání.

Přidejte skill pro AI agenty

Nechte AI agenty pro programování, jako jsou Claude Code a Codex, ovládat cisivi za vás. Instalátor přidá skill Cisivi do adresáře se skilly vašeho agenta. V Claude můžete také nahrát soubor cisivi_1.0.1_skill.zip ze stránky vydání jako vlastní skill. Nejdřív nainstalujte samotné cisivi.

$ npx skills add partoska/cisivi

Přehled

Spusťte cisivi [OPTIONS] [QUERY] [FILE...]. Přečte každý FILE v daném pořadí, nebo standardní vstup, pokud žádný soubor nezadáte nebo je soubor -. Dotaz je vždy první. Vestavěnou nápovědu zobrazíte příkazem cisivi -h.

Dotazy

.
Celá tabulka jako CSV (výchozí).
COLUMN
Hodnoty jednoho sloupce, jedna na řádek.
COLUMN,...
Více sloupců jako CSV.
#N
Sloupec podle pozice, počítané od 0.
"NAME"
Název sloupce v uvozovkách, který může obsahovat čárky nebo uvozovky. V uvozovkách se escapují \" a \\.
[ROWS]
Řádky podle pozice jako CSV: [N], [-N] od konce, [N:M] od N až před M, [N:], [:M] nebo [*].
[ROWS].COLUMN
Řádky a sloupce zároveň, například [0].name pro jednu hodnotu.

Operátory filtrů

=, !=
Rovná se, nebo nerovná, jako přesný text.
<, <=, >, >=
Uspořádání: čísla podle hodnoty, ostatní text bajt po bajtu.
~, !~
Obsahuje hodnotu, nebo neobsahuje.

Návratové kódy

0
Nalezeno, nebo se úprava povedla.
1
Nenalezeno: chybějící sloupec nebo žádný vybraný řádek. Záhlaví se přesto vypíše, takže výstup zůstává platným CSV.
2
Chyba použití nebo vstupu, včetně syntaktických chyb CSV s číslem řádku na standardním chybovém výstupu.

Parametry

-f, --filter EXPR
Ponechá řádky, pro které platí COLUMN OPERATOR VALUE. Při opakování musí platit všechny.
--sort COLUMN
Seřadí řádky podle COLUMN, čísla podle hodnoty.
--sort-desc COLUMN
Totéž v sestupném pořadí.
-k, --keys
Vypíše názvy sloupců, jeden na řádek.
-c, --count
Vypíše počet vybraných řádků.
-s, --set VALUE
Nastaví sloupec z dotazu na zadanou hodnotu ve vybraných řádcích. Chybějící sloupec přidá.
-a, --add ROW
Připojí jeden záznam zadaný jako text CSV, nebo ho s [N] vloží jako řádek N.
-d, --delete
Smaže vybrané řádky, nebo sloupce uvedené v dotazu.
-w, --write
Zapíše úpravu zpět do FILE místo jejího vypsání. Vyžaduje právě jeden soubor.
-j, --json
Vypíše JSON: pole s objektem pro každý řádek.
-t, --table
Vypíše zarovnanou tabulku ke čtení.
-0, --null
Ukončí surové hodnoty a názvy znakem NUL místo nového řádku.
-F, --delimiter C
Čte pole oddělená znakem C, například ; nebo tab.
--output-delimiter C
Zapisuje pole oddělená znakem C. Ve výchozím stavu stejným, jaký četl.
--crlf
Ukončí zapsané řádky znaky CRLF místo LF.
-n, --no-header
Čte první řádek jako data. Sloupce se pak určují jako #N.
-i, --ignore-case
Porovnává názvy sloupců bez ohledu na velikost písmen (ASCII).
-h, --help
Zobrazí nápovědu.
-V, --version
Zobrazí verzi.

Knihovna

csInit, csDestroy
Vytvoří a uvolní dokument. Příznak CS_FHEADER udělá z prvního řádku záhlaví, CS_FICASE zapne porovnávání názvů bez ohledu na velikost písmen a CS_FLF převede zalomení řádků uvnitř hodnot na LF.
csLoad, csSave
Načte dokument ze souboru, nebo ho do souboru uloží.
csRead, csWrite
Načte nebo zapíše text přes vaše vlastní callbacky: standardní vstup, socket nebo paměť.
csParse
Zpracuje text CSV z řetězce.
csGet, csSet
Přečte nebo nahradí hodnotu pole podle řádku a sloupce. Se záhlavím obsahuje řádek 0 názvy sloupců.
csRowAdd, csRowInsert
Připojí řádek, nebo ho vloží na zadanou pozici. Řádky odeberou csRowRemove a csRowRemoveMany.
csRowCount, csRowAt
Spočítá řádky včetně záhlaví a prochází je v pořadí dokumentu.
csColumnFind, csColumnName
Najde sloupec podle názvu, nebo vrátí jeho název. csColumnCount je spočítá.
csColumnAdd, csColumnInsert
Přidá sloupec vyplněný hodnotou, nebo ho vloží na zadanou pozici. csColumnRemove sloupec odebere.
csSetDelimiter, csSetNewline
Zvolí oddělovač polí pro čtení i zápis a to, čím končí zapsané řádky.
csWriteRow
Zapíše jediný záznam s nastavením dokumentu, pro řádky vznikající postupně.
csError
Vrátí poslední chybu se stavem, číslem řádku a zprávou.

Celé API najdete v souboru cisivi.h. Vložte cisivi.h a linkujte pomocí pkg-config --cflags --libs cisivi.

Použití

Skripty a provoz

  • →Čtěte sloupce a hodnoty z exportů CSV ve shellových skriptech a CI úlohách, kde cut a awk selhávají na čárkách v uvozovkách.
  • →Filtrujte, řaďte a počítejte řádky reportů a pak je vypište jako JSON pro další nástroje nebo jako tabulku pro lidi.
  • →Spojte měsíční exporty do jednoho souboru, převeďte exporty z tabulkových procesorů oddělené středníky, nebo aktualizujte jednu hodnotu přímo v souboru.

Vývoj

  • →Přidejte čtení a zápis CSV do programu v C nebo C++ s jednou malou knihovnou bez závislostí.
  • →Čtěte CSV z paměti, socketu nebo standardního vstupu přes callbacky pro streamy a zapisujte řádky postupně.
  • →Nechte AI asistenta pro programování dotazovat a upravovat soubory CSV přesnými příkazy místo úprav textu.

Technické specifikace

JazykC99
LicenceMIT
Verze1.0.1
PlatformamacOS 11+, Linux (x64, ARM64, ARMv6+), Windows (x64, ARM64)
ZávislostiStandardní knihovna C
SestaveníCMake 3.20+ nebo Make

Přestaňte dělit CSV podle čárek.

Nainstalujte Cisivi jedním příkazem a svůj první dotaz do souboru CSV spustíte během pár sekund.

Prohlédněte si zdrojový kód na GitHubu, stáhněte balíček z npm, přečtěte si dokumentaci nebo přidejte skill pro AI agenty.