我的未来里没有你 发表于 2024-8-22 10:10:44

一个能够生成 Markdown 表格的 Bash 脚本

哈喽大家好,我是咸鱼。
今天分享一个很实用的 bash 脚本,可以通过手动提供单元格内容和列数或者将带有分隔符的文件(如 CSV、TSV 文件)转换为 Markdown 表格。
源代码在文末哦!原文链接:https://josh.fail/2022/pure-bash-markdown-table-generator/
具体功能:

[*]手动生成表格:允许用户输入表格内容和列数,生成标准的 Markdown 格式表格。
[*]文件转换:可以将 CSV 或 TSV 文件转换为 Markdown 表格。
[*]选项支持:支持指定列数、设置分隔符、解析 CSV/TSV 文件等选项。
主要选项:

[*]-COLUMNS:设置生成表格的列数。
[*]-sSEPARATOR:自定义输入文件的列分隔符。
[*]--csv 和 --tsv:分别用于解析 CSV 和 TSV 文件。
几个月前,我想要一个便携式的 Markdown 表格生成器,于是写了这个 markdown-table 脚本。
一开始我只是想传入一堆参数和列数,并让它生成相应的 Markdown 表格。就像下面的例子:
markdown-table -4 \
"Heading 1""Heading 2" "Heading 3" "Heading 4" \
"Hi"         "There"   "From"      "Markdown\!" \
"Everything" "Is"      "So"      "Nicely Aligned\!"当我实现了这一功能后,我意识到还可以添加支持解析带有自定义分隔符的文件,比如 CSV 或 TSV。
markdown-table --tsv < test.tsv上面两种方法都会生成一个 Markdown 表格:
| Heading 1| Heading 2 | Heading 3 | Heading 4      |
| ---------- | --------- | --------- | -------------- |
| Hi         | There   | From      | Markdown       |
| Everything | Is      | So      | Nicely Aligned |#!/usr/bin/env bash# Usage: markdown-table -COLUMNS #      markdown-table -sSEPARATOR < file## NAME#   markdown-table -- generate markdown tables## SYNOPSIS#   markdown-table -COLUMNS #   markdown-table -sSEPARATOR < file## DESCRIPTION#   markdown-table helps generate markdown tables. Manually supply arguments#   and a column count to generate a table, or pass in a delimited file to#   convert to a table.## OPTIONS#   -COLUMNS#       Number of columns to include in output.##   -sSEPARATOR#       String used to separate columns in input files.##   --csv#       Shortcut for `-s,` to parse CSV files. Note that this is a "dumb" CSV#       parser -- it won't work if your cells contain commas!##   --tsv#       Shortcut for `-s$'\t'` to parse TSV files.##   -h, --help#       Prints help text and exits.## EXAMPLES#   Build a 4 column markdown table from arguments:#   markdown-table -4 \#       "Heading 1""Heading 2" "Heading 3" "Heading 4" \#       "Hi"         "There"   "From"      "Markdown!" \#       "Everything" "Is"      "So"      "Nicely Aligned!"##   Convert a CSV file into a markdown table:#   markdown-table -s, < some.csv#   markdown-table --csv < some.csv##   Convert a TSV file into a markdown table:#   markdown-table -s$'\t' < test.tsv#   markdown-table --tsv < test.tsv# Call this script with DEBUG=1 to add some debugging outputif [[ "$DEBUG" ]]; thenexport PS4='+ [${BASH_SOURCE##*/}:${LINENO}] 'set -xfiset -e# Echoes given args to STDERR## $@ - args to pass to echowarn() {echo "$@" >&2}# Print the help text for this program## $1 - flag used to ask for help ("-h" or "--help")print_help() {sed -ne '/^#/!q;s/^#$/# /;/^# /s/^# //p' < "$0" |    awk -v f="$1" '      f == "-h" && ($1 == "Usage:" || u) {      u=1      if ($0 == "") {          exit      } else {          print      }      }      f != "-h"      '}# Returns the highest number in the given arguments## $@ - one or more numeric argumentsmax() {local max=0 argfor arg; do    (( ${arg:-0} > max )) && max="$arg"doneprintf "%s" "$max"}# Formats a table in markdown format## $1 - field separator stringformat_table() {local fs="$1" buffer col current_col=0 current_row=0 min=3local -a lengths=()buffer="$(cat)"# First pass to get column lengthswhile read -r line; do    current_col=0    while read -r col; do      lengths["$current_col"]="$(max "${#col}" "${lengths[$current_col]}")"      current_col=$((current_col + 1))    done
页: [1]
查看完整版本: 一个能够生成 Markdown 表格的 Bash 脚本