Я пытаюсь распечатать файл CSV, используя определенные ширины столбцов. Я думаю, что есть одна ошибка с i, из-за которой первый столбец не печатается. Как вы видите, я новичок в Баш и отчаянно пытается сделать это действовать как 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
Я также возникли проблемы поворота случай заявление в петлю. Чтобы не дали никаких результатов, я попытался заменить весь C-стиль для цикла с:
for i in "${arg[@]}"; do
printf "%-${column_width[$i]}s" ${arg[$i]}
done
Я уверен, что есть лучший способ для достижения этой цели. Я пытаюсь узнать о sed/awk, но я бы хотел знать, как это сделать без них.
Оператор case не охватывает $ i == 0, следовательно, пропускается первый столбец. –
Спасибо. Я мог бы прочитать это более внимательно. – contrapositive