
Csv
Quickly inspect, filter, and project columns from CSV files from the shell when agents or scripts need tabular data answers.
Install
npx skills add https://github.com/vercel-labs/bash-tool --skill csvWhat is this skill?
- analyze.sh: row/column counts, header, first five and last three data rows
- filter.sh: column index match filter with header preserved
- select.sh: pick specific columns by index from a CSV file
- Bash-only, no extra runtime beyond awk/wc/head/tail
- Composable scripts for agent-driven data exploration
Adoption & trust: 147 installs on skills.sh; 580 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Lark Drivelarksuite/cli
Lark Sharedlarksuite/cli
Lark Minuteslarksuite/cli
Tzstxixu-me/skills
Runcomfy Cliagentspace-so/runcomfy-agent-skills
Caveman Helpjuliusbrussee/caveman
Journey fit
Primary fit
CSV shell utilities support implementation and data prep during product build rather than launch or growth workflows. Tabular extract-transform patterns sit with backend and data scripting, even when invoked via bash-tool in an agent session.
Common Questions / FAQ
Is Csv safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Csv
#!/bin/bash # Analyze a CSV file - show structure and statistics if [ -z "$1" ]; then echo "Usage: analyze.sh <csv_file>" >&2 exit 1 fi FILE="$1" if [ ! -f "$FILE" ]; then echo "Error: File not found: $FILE" >&2 exit 1 fi echo "=== CSV Analysis: $FILE ===" echo "" # Row count TOTAL_ROWS=$(wc -l < "$FILE" | tr -d ' ') echo "Total rows: $TOTAL_ROWS" # Column count (from header) HEADER=$(head -1 "$FILE") COL_COUNT=$(echo "$HEADER" | awk -F',' '{print NF}') echo "Columns: $COL_COUNT" echo "" echo "=== Header ===" echo "$HEADER" echo "" echo "=== Column Names ===" echo "$HEADER" | tr ',' '\n' | nl echo "" echo "=== First 5 Data Rows ===" head -6 "$FILE" | tail -5 echo "" echo "=== Last 3 Data Rows ===" tail -3 "$FILE" #!/bin/bash # Filter CSV rows where a column matches a value if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then echo "Usage: filter.sh <csv_file> <column_number> <value>" >&2 echo "Example: filter.sh data.csv 3 active" >&2 exit 1 fi FILE="$1" COL="$2" VALUE="$3" if [ ! -f "$FILE" ]; then echo "Error: File not found: $FILE" >&2 exit 1 fi # Print header head -1 "$FILE" # Filter rows where column matches value tail -n +2 "$FILE" | awk -F',' -v col="$COL" -v val="$VALUE" '$col == val' #!/bin/bash # Select specific columns from a CSV if [ -z "$1" ] || [ -z "$2" ]; then echo "Usage: select.sh <csv_file> <columns>" >&2 echo "Example: select.sh data.csv 1,3,5" >&2 exit 1 fi FILE="$1" COLS="$2" if [ ! -f "$FILE" ]; then echo "Error: File not found: $FILE" >&2 exit 1 fi cut -d',' -f"$COLS" "$FILE" #!/bin/bash # Sort CSV by a column if [ -z "$1" ] || [ -z "$2" ]; then echo "Usage: sort.sh <csv_file> <column_number> [--numeric] [--reverse]" >&2 echo "Example: sort.sh data.csv 2 --numeric --reverse" >&2 exit 1 fi FILE="$1" COL="$2" shift 2 SORT_OPTS="-t, -k${COL},${COL}" # Parse options while [ $# -gt 0 ]; do case "$1" in --numeric|-n) SORT_OPTS="$SORT_OPTS -n" ;; --reverse|-r) SORT_OPTS="$SORT_OPTS -r" ;; esac shift done if [ ! -f "$FILE" ]; then echo "Error: File not found: $FILE" >&2 exit 1 fi # Print header first, then sort the rest head -1 "$FILE" tail -n +2 "$FILE" | sort $SORT_OPTS --- name: csv description: Analyze and transform CSV data using bash tools --- # CSV Processing Skill Process CSV files using standard bash tools (awk, cut, sort, grep). ## Available Scripts ### analyze.sh Get statistics and summary of a CSV file. ```bash bash /skills/csv/scripts/analyze.sh data.csv ``` ### filter.sh Filter rows where a column matches a value. ```bash bash /skills/csv/scripts/filter.sh data.csv <column_number> <value> ``` ### select.sh Select specific columns from CSV. ```bash bash /skills/csv/scripts/select.sh data.csv <col1,col2,col3> ``` ### sort.sh Sort CSV by a column. ```bash bash /skills/csv/scripts/sort.sh data.csv <column_number> [--numeric] [--reverse] ``` ## Examples ```bash # Show CSV summary bash /skills/csv/scripts/analyze.sh sales.csv # Filter where column 3 equals "active" bash /skills/csv/scripts/filter.sh users.csv 3 active # Select columns 1, 2, and 4 bash /skills/csv/scripts/select.sh data.csv 1,2,4 # Sort by column 2 numerically in reverse bash /skills/csv/scripts/sort.sh data.csv 2 --numeric --reverse ```