我试图使用某些列宽打印CSV文件。我认为我有一个错误,导致第一列不能打印。正如你所看到的,我是新来bash和拼命试图使它像C.Bash - 打印CSV文件
CSV='./test.csv'
column_width=(20 6 5 10 10 10 10 8 30)
IFS=","
while read LINE
do
set -- $LINE
arg=([email protected])
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,但是现在我想知道如何在没有它们的情况下执行此操作。
您的case语句不包括$ i == 0,因此跳过了第一列。 –
谢谢。我可以更仔细地阅读。 – contrapositive