У меня есть экспорт CSV, который мне нужно сопоставить с новыми значениями, чтобы затем импортировать в другую систему.Я использую ArangoDB для создания этого отображения миграции данных.
Ниже приведен полный используемый скрипт:
#!/bin/bash
execute () {
filepath=$1
prefix=$2
keyField=$3
filename=`basename "${filename%.csv}"`
collection="$prefix$filename"
filepath="/data-migration/$filepath"
# Check for "_key" column
if ! xsv headers "$1" | grep -q _key
# Add "_key" column using the keyfield provided
then
xsv select $keyField "$1" | sed -e "1s/$keyField/_key/" > "$1._key"
xsv cat columns "$1" "$1._key" > "$1.cat"
mv "$1.cat" "$1"
rm "$1._key"
fi
# Import CSV into Arango Collection
docker exec arango arangoimp --collection "$collection" --type csv "$filepath" --server.password ''
}
# This single line runs the execute() above
execute 'myDirectory/myFile.csv' prefix_ OLD_ORG_ID__C
До сих пор я вывел параметр $keyField
(OLD_ORG_ID__C
) , переданный в execute()
функция, используется в цикле сценария.Это ищет столбец $keyField
, а затем переносит значения во вновь созданный столбец _key
, используя XSV toolkit .
OLD_ORG_ID__C | _key
A123 -> A123
B123 -> B123
-> ## <-auto populate
К сожалению, не каждая строка имеет значение для OLD_ORG_ID__C
столбец, и в результате _key
для этой строки также будет пустым, что приведет к сбою импорта в Arango.
Примечание: Это поле _key
необходимо для правильной работы моих сценариев AQL
Как переписать цикл для автоматического индексированияпустые значения?
then
xsv select $keyField "$1" | sed -e "1s/$keyField/_key/" > "$1._key"
xsv cat columns "$1" "$1._key" > "$1.cat"
mv "$1.cat" "$1"
rm "$1._key"
fi
Есть ли лучший способ решить эту проблему?Возможно xsv sort
с помощью keyField
и затем автоматически заполнить пустые строки до конца?
ОБНОВЛЕНИЕ: Согласно комментариям / ответу, я пробовал что-то в этом духе, но до сих порвсе еще не работает
#!/bin/bash
execute () {
filepath=$1
prefix=$2
keyField=$3
filename=`basename "${filename%.csv}"`
collection="$prefix$filename"
filepath="/data-migration/$filepath"
# Check for "_key" column
if ! xsv headers "$1" | grep -q _key
# Add "_key" column using the keyfield provided
then
awk -F, 'NR==1 { for(i=1; i<=NF;++i) if ($i == "'$keyField'") field=i; print; next }
$field == "" { $field = "_generated_" ++n }1' $1 > $1-test.csv
fi
}
# import a single collection if needed
execute 'agas/Account.csv' agas_ OLD_ORG_ID__C
Это создает файл Account-test.csv, но, к сожалению, в нем нет столбца "_key" или, и он изменяется на значения OLD_ORG_ID__C
.Желательно, чтобы значения «_key» заполнялись автоматически пронумерованными значениями только тогда, когда OLD_ORG_ID__C
пусто, в противном случае они должны копировать предоставленное значение.