gpt4 book ai didi

Bash - 打印 CSV 文件

转载 作者:行者123 更新时间:2023-12-02 22:37:01 25 4
gpt4 key购买 nike

我正在尝试使用特定列宽打印 CSV 文件。我认为 i 有一个错误导致第一列无法打印。正如您将看到的,我是 bash 的新手,并且拼命想让它表现得像 C。

CSV='./test.csv'
column_width=(20 6 5 10 10 10 10 8 30)

IFS=","
while read LINE
do
set -- $LINE
arg=($@)
for (( i = 0 ; i < ${#arg[@]} ; i++))
do
case $i in
1) printf "%-20s" ${arg[$i]} ;;
2) printf "%-6s" ${arg[$i]} ;;
3) printf "%-5s" ${arg[$i]} ;;
4) printf "%-10s" ${arg[$i]} ;;
5) printf "%-10s" ${arg[$i]} ;;
6) printf "%-10s" ${arg[$i]} ;;
7) printf "%-10s" ${arg[$i]} ;;
8) printf "%-8s" ${arg[$i]} ;;
9) printf "%-30s\n" ${arg[$i]} ;;
esac
done
done < $CSV
unset IFS

我在将 case 语句转换为循环时也遇到了问题。无济于事,我尝试将整个 C 风格的 for 循环替换为:

for i in "${arg[@]}"; do
printf "%-${column_width[$i]}s" ${arg[$i]}
done

我确信有更好的方法来实现这一点。我正在尝试学习 sed/awk,但我现在想知道没有它们如何学习。

最佳答案

#!/usr/bin/env bash

csv=./test.csv
column_width=(20 6 5 10 10 10 10 8 30)

while n=0; IFS=, read -ra x; do
printf '%-*s' {,,,,,,,,}{"${column_width[n]}","${x[n++]}"} 1 $'\n'
done <"$csv"

关于Bash - 打印 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11320560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com