| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/bin/bash
- # 检查输入参数
- if [ $# -ne 1 ]; then
- echo "用法: $0 <csv文件>"
- exit 1
- fi
- csv_file="$1"
- txt_file="${csv_file%.*}.formatted.txt"
- # 使用awk处理CSV
- awk -F ',' '
- BEGIN {
- # 定义表格元素
- OFS = " | "
- hline_char = "-"
- }
- NR == 1 {
- # 读取表头
- for (i=1; i<=NF; i++) {
- gsub(/"/, "", $i) # 去除字段中的双引号
- header[i] = $i
- max_width[i] = length($i)
- }
- }
- NR > 1 {
- # 更新最大列宽
- for (i=1; i<=NF; i++) {
- gsub(/"/, "", $i) # 去除字段中的双引号
- w = length($i)
- if (w > max_width[i]) max_width[i] = w
- }
- }
- END {
- # 打印表头
- printf("|")
- for (i=1; i<=NF; i++) {
- printf(" %-"max_width[i]"s |", header[i])
- }
- printf "\n"
- # 打印分隔线
- printf("|")
- for (i=1; i<=NF; i++) {
- printf("%s", hline_char)
- for (j=0; j<max_width[i]+2; j++) printf("%s", hline_char)
- printf("|")
- }
- printf "\n"
- # 打印数据行
- while (getline line < "'"$csv_file"'") {
- if (++counter == 1) continue # 跳过表头
- $0 = line
- printf("|")
- for (i=1; i<=NF; i++) {
- gsub(/"/, "", $i)
- printf(" %-"max_width[i]"s |", $i)
- }
- printf "\n"
- }
- }' "$csv_file" > "$txt_file"
|