Bash l oop Через CSV, но осталось значение последней строки с новой строкой - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть дело с l oop. Моя задача - создать файл json с l oop из данных CSV. К сожалению, когда я генерирую поле pk, значение пустое, что делает мою json ошибку. Это подмножество моего csv

table,pk
aaa,nik
aab,ida
aac,idb
aad,idc
aae,idd
aef,ide
...

Это мой полный код:

#!bin/bash
CSV_LIST="/home/admin/kafka/main/config/tables/table_lists.csv"
DATA=${CSV_LIST}

mkdir sqlconn 
cd sqlconn
cat ${DATA} |
while IFS=',' read table pk ; do
    PK= echo ${pk} | tr -d '\n'
    cat > ./sqlservercon_$table.json << EOF 
    {"name" :"sqlservercon_$table","config":{"connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector","topics":"$table",

...

,"pk.fields":" $PK","pk.mode":"record_value","destination.table.format":"db.dbo.$table","errors.tolerance":"all","flush.size":"10000"
}}

EOF

done

Таким образом, результат рендеринга дает мне это:

    {"name" :"sqlservercon_XXX","config":{"connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector","topics":"XXX",...
,"pk.fields":" ","pk.mode":"record_value","destination.table.format":"db.dbo.XXX","errors.tolerance":"all","flush.size":"10000"
}}

, но когда я не редактировал свое поле pk

...,
"pk.fields":" $pk",
...

, это дает мне неправильный JSON файл, подобный этому:

...,"pk.fields":" id
",...

Любая помощь приветствуется

ОБНОВЛЕНИЕ

Когда я проверяю свой CSV, используя cat -v table_lists.csv, последний столбец имеет символ ^ M, который разрушает json файл. Но я до сих пор не знаю, как с этим справиться.

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Что касается комментариев, которые я дал, работал следующий скрипт

#!/bin/bash

cd /home/test

CSV_LIST="/home/test/tableList.csv"
DATA=${CSV_LIST}

# Prepare data file     
sed -i "s/\r//g" ${DATA}

# Added for debugging purpose
echo "Creating connection file in JSON for"

# Print file content from 2nd line only
tail --lines=+2 ${DATA} |
while IFS=',' read TABLE PK ; do

    # Added for debugging purpose
    echo "Table: ${TABLE} and PK: ${PK}"

    # Added missing $()
    PK_TRIMMED=$(echo ${PK} | tr -d '\n')

    cat > ./sqlservercon_${TABLE}.json << EOF
    {"name":"sqlservercon_${TABLE}","config":{"connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector","topics":"${TABLE}",...,"pk.fields":"${PK_TRIMMED}","pk.mode":"record_value","destination.table.format":"db.dbo.${TABLE}","errors.tolerance":"all","flush.size":"10000"}}
EOF

done
0 голосов
/ 08 апреля 2020

Хорошо, после нескольких проверок, помимо неверного сценария, который я здесь привожу, я изучаю файл CSV. Я загружаю его прямо из Spreadsheet Google, даже если он дает мне .csv, но не закодирован для UNIX или Ubuntu в качестве среды разработки.

Поэтому я решил сделать что-то подобное вручную:

  1. В электронной таблице Google выберите все столбцы, которые я хочу использовать
  2. Создайте пустой файл CSV
  3. Скопируйте и вставьте его ячейки в файл .csv
  4. Измените "" (двойной пробел) с помощью,

И для l oop, потому что вместо этого я хочу свернуть его, сохраняя json, я делаю это:

#!/bin/bash
CSV_LIST="/home/admin/kafka/main/config/tables/table_lists.csv"
DATA=${CSV_LIST}

 while IFS=',' read table pk; do

curl -X POST http://localhost:8083/connectors -H 'Content-Type:application/json' -d'{"name" :"sqlservercon_'$table'","config":{...,...,"destination.table.format":"db.dbo.'$table'","errors.tolerance":"all",
"flush.size":"10000"
}}' | jq
done < ${DATA}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...