mergeDuplicateSubjectsAndRmDuplicates.sh

This commit is contained in:
mrfry 2023-11-20 15:36:13 +01:00
parent 2c031e4d05
commit c8653805fb
2 changed files with 63 additions and 28 deletions

View file

@ -1,52 +1,59 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const fs = require('fs') const fs = require('fs')
const path = require('path') const path = require('path')
const arg = process.argv[2] const filesDirPath = process.argv[2]
const files = fs.readdirSync(arg) const resdir = process.argv[3]
const resdir = './res' const files = fs.readdirSync(filesDirPath)
let duplicateSubjects = 0 let duplicateSubjects = 0
let questionsInDuplicateSubjects = 0 let questionsInDuplicateSubjects = 0
if (!fs.existsSync(resdir)) {
fs.mkdirSync(resdir)
}
function merge(x, y) { function merge(x, y) {
return { return {
Name: x.Name, Name: x.Name,
Questions: [...x.Questions, ...y.Questions], Questions: [...x.Questions, ...y.Questions],
} }
} }
const fixQdb = (dbname) => { const fixQdb = (dbname) => {
console.log(dbname) console.log(dbname)
console.log() console.log()
const file = JSON.parse(fs.readFileSync(path.join(arg + dbname), 'utf8')) const file = JSON.parse(
fs.readFileSync(path.join(filesDirPath + dbname), 'utf8')
)
const result = {} const result = {}
file.forEach((x) => { file.forEach((x) => {
if (result[x.Name]) { if (result[x.Name]) {
console.log(x.Name, ' is duplicate!') console.log(x.Name, ' is duplicate!')
duplicateSubjects += 1 duplicateSubjects += 1
result[x.Name] = merge(result[x.Name], x) result[x.Name] = merge(result[x.Name], x)
questionsInDuplicateSubjects += result[x.Name].Questions.length questionsInDuplicateSubjects += result[x.Name].Questions.length
} else { } else {
result[x.Name] = x result[x.Name] = x
} }
}) })
const newFile = Object.values(result) const newFile = Object.values(result)
fs.writeFileSync(path.join(resdir, dbname), JSON.stringify(newFile)) fs.writeFileSync(path.join(resdir, dbname), JSON.stringify(newFile))
} }
if (fs.existsSync(resdir)) { if (fs.existsSync(resdir)) {
fs.rmSync(resdir, { recursive: true }) fs.rmSync(resdir, { recursive: true })
fs.mkdirSync(resdir) fs.mkdirSync(resdir)
} }
files.forEach((x) => { files.forEach((x) => {
if (x.includes('json')) { if (x.includes('json')) {
fixQdb(x) fixQdb(x)
} }
}) })
console.log('Done! Found duplicates:', duplicateSubjects) console.log('Done! Found duplicates:', duplicateSubjects)

View file

@ -0,0 +1,28 @@
#!/bin/bash
OUTDIR="/tmp/res/"
echo "> pwd ${PWD}"
mkdir -p OUTDIR
node ./src/standaloneUtils/duplicateSubjectsInQdbFix.js ./public/questionDbs/ "${OUTDIR}"
echo -e "\n\n\n"
find "${OUTDIR}" -type f | while IFS= read -r qdb; do
node \
./src/standaloneUtils/rmDuplicates.js \
"${qdb}"
echo -e "\n\n\n"
done
rm -v ${OUTDIR}*.json || exit
mv -v ./*.res "${OUTDIR}" || exit
find "${OUTDIR}" -type f | while IFS= read -r qdb; do
newName=$(echo "${qdb}" | rev | cut -d '.' -f 2- | rev)
mv -v "${qdb}" "${newName}"
done
echo "Done!"