У меня есть файл с миллионами записей. Я просто сделаю это просто с двумя примерами записей здесь. Моя цель - добавить разделители, например запятую, чтобы файл имел такое же количество разделителей, чтобы я мог загрузить файл в базу данных.
Проблема в том, что вложенный цикл while просто добавляет фиксированное количество разделителей в конце строки. Моя цель - динамически добавлять разделители в соответствии с количеством разделителей, которые уже есть в файле. Я изменил внутренний цикл while на блок операторов if, тоже самое произошло. Поэтому я не думаю, что необходим вложенный цикл while.
Вот мой пример текстового файла:
1st,1,
2nd,2
Вот сценарий. Первая позиция ввода пользователя - это текстовый файл, вторая позиция - количество разделителей, которые я хочу.
#!/bin/bash
f="$1"
delim="$2"
while read line
do
cnt=`echo $line | tr -cd ',' | wc -c`
while [[ $cnt -lt $delim ]];
do
sed -i 's/$/,/' $f
cnt=`expr $cnt + 1`
done
done < $f
Вот мой след с использованием bash -x:
bash -x csv.sh split_address_2.csv 3
+ f=split_address_2.csv
+ delim=3
+ read line
++ wc -c
++ tr -cd ,
++ echo 1st,1,
+ cnt=2
+ [[ 2 -lt 3 ]]
+ sed -i 's/$/,/' split_address_2.csv
++ expr 2 + 1
+ cnt=3
+ [[ 3 -lt 3 ]]
+ read line
++ wc -c
++ tr -cd ,
++ echo 2nd,2
+ cnt=1
+ [[ 1 -lt 3 ]]
+ sed -i 's/$/,/' split_address_2.csv
++ expr 1 + 1
+ cnt=2
+ [[ 2 -lt 3 ]]
+ sed -i 's/$/,/' split_address_2.csv
++ expr 2 + 1
+ cnt=3
+ [[ 3 -lt 3 ]]
+ read line
Вот вывод текстового файла. Вы можете видеть, что скрипт просто добавил 3 запятых в конце каждой строки.
1st,1,,,,
2nd,2,,,
Большое спасибо за ваш добрый ответ. Хорошего дня!