Итерация строк в csv для сохранения столбцов в качестве переменных

  • Когда скрипт выполняется с ./, вызывается интерпретатор из строки shebang.

  • с sourceиспользуется текущая оболочка(sourceявляется расширением bash, поэтому вы должны запустить bash)

  • с bash script.shоболочка bash в вашем PATH вызывается с помощью сценария оболочки.

0
26.11.2021, 19:02
2 ответа

Проблема заключается в настройке$IFS:

echo -n "$IFS" | od -t c -t x1
0000000      \t  \n
         20  09  0a

Вывод catразделяется на каждый пробел, табуляцию или новую строку. Вы хотите, чтобы он разделялся только на новые строки. Так что это сработает:

IFS='
'
for i in `cat file.csv`
    do
        VARIABLE=$(echo $i && echo ", Another text")
    done

Но это не лучший подход. Вы должны читать строки. Также не стоит использовать подстановку команд и echoдля объединения переменных.

while IFS= read -r line; do
    VARIABLE="${line}, Another text"
done <file.csv
1
26.11.2021, 22:57

Если все, что вы хотите сделать, это добавить еще один столбец в CSV, попробуйте инструмент, предназначенный для работы с CSV.

Команда GoCSV add может сделать это легко:

gocsv add -n 'Column4' -t ' Another text' sample.csv

дает мне:

Column1,Column2,Column3,Column4
A Existing text in Column1," A Date in Column2"," A Integer in Column3"," Another text"
B Existing text in Column1," B Date in Column2"," B Integer in Column3"," Another text"
C Existing text in Column1," C Date in Column2"," C Integer in Column3"," Another text"

Если вы не хотите рассматривать его как настоящий CSV-файл (, для которого потребуются все двойные кавычки из-за начальных пробелов ), вы можете попробовать это:

sed 's/.$/, Another text/' sample.csv
Column1,Column2,Column3, Another text
A Existing text in Column1, A Date in Column2, A Integer in Column3, Another text
B Existing text in Column1, B Date in Column2, B Integer in Column3, Another text
C Existing text in Column1, C Date in Column2, C Integer in Column3, Another text

Но! , это работает только в том случае, если ваш файл имеет конечную/терминальную новую строку. В противном случае это исказит последний символ (в вашем последнем столбце, в вашей последней строке ).

0
29.11.2021, 23:06

Теги

Похожие вопросы