shell script for Data Transport

shell script for Data Transport

shell script for Data Transport

در این مقاله قصد دارم با طرح پرسشی و ارائه راه حلی به روش script نویسی به حل آن بپردازم .

فرض کنید که  یک  data file  به شکل زیر دارید که نحوه قرار گرفتن رکوردهای اطلاعاتی بصورت زیر است :

فرض کیند که نام فایلی که این نمونه از داده ها در آن ذخیره شده اند مثلا db1.txt باشد .

قسمت اول:

{
ID: 1001,
NAME: USER1,
SS: TEST1
}
{
ID: 1002,
NAME: USER2,
SS: TEST2
}

و حالا می خواهیم این داد ها را به صورت زیر ذخیره نماییم :

قسمت دوم:

ID,NAMES,SS

۱۰۰۱,USER1,TEST1

۱۰۰۲,USER2,TEST2

نمونه داده های بالا در قسمت اول ، داده ها را بصورت ستونی نگهداری کرده است که نشان می دهد با

نوعی داده از پایگاه داده ای از مدل NoSQL مثل mongodb سرو کار داریم و در قسمت دوم با نوع داده ای

مثل پایگاه داده ای Oracle سروکار داریم .

غالبا مقایسه و یا برگرداندن داده ها از یک مدل پایگاه داده ای به مدل دیگر در زمانهای Conversion انجام

می گردد .

در مقوله Convert کردن یا تغییر از یک نوع پایگاه داده به نوع دیگر مثلا رفتن از روی oracle  به mongodb

نیاز داریم که به روشهایی از صحت اطلاعات منتقل شده در database جدید مطمئن شویم.

مثال بالا نمونه ای convert داده ها از Oracle به mongodb می باشد که جهت اطمینان از صحت داده نیاز

داریم script هایی بنویسیم:

در زیر چند نمونه از script هایی که میتوان برای تبدیل مدل و ترتیب داده های نشان داده شده در قسمت

اول بصورت قسمت دوم انجام داد را آورده ام :

  • نمونه اول script

awk ‘BEGIN {print “ID,NAME,SS”} $1 !~ “[{}]” {s = s $2} $1 == “}” {print s; s = “”}’ db1.tx

در script بالا فرض بر این است که بین داده های قسمت اول فاصله خالی وجود نداشته باشد اما چنانچه

فاصله خالی بین داده ها موجود باشد از script دوم جهت حذف فاصله خالی استفاده نماییم .

خروجی script  بالا روی فایل قسمت اول بدین صورت می شود :

ID,NAME,SS
۱۰۰۱,USER1,TEST1
۱۰۰۲,USER2,TEST2

  • نمونه دوم script

awk ‘BEGIN {print “ID,NAME,SS”} $1 !~ “[{}]” {s = s substr($0,index($0,” “)+1)} $1 == “}”

{print s; s = “”}’ db1.txt

در واقع تابع substr  به منظور حذف فاصله خالی بین داده ها بکار می رود .

در ضمن کلیه خطوط بالا فقط یک خط است و بعلت جا نشدن در یک خط در سایت قسمت print آخر

در خط بعد نوشته شده است

  • نمونه سوم script

در این script  ابتدا ستون heading را چاپ  و سپس کلیه Carriage Return ها یا کارکتری رفتن به

خط بعد را حذف کرده و

سپس کلیه “{” و Carriage Return ها را حذف کرده و سپس کارکتر “}” را حذف و ستون مربوط به

heading  را حذف کرده و سپس کلیه کارکترهای “:” را حذف میکنیم  .

شاید راه حل خیلی مناسبی نباشه اما در زمان اضطراری میتواند راهگشا باشد .

 

  echo “ID,NAME,SS”; cat db1.txt | tr -d ‘\n’ | sed ‘s/}/\n/g’ | sed ‘s/{ID://’ | sed ‘s/NAME://’ |

    sed ‘s/SS://’

  • راه حل چهارم 

در راه حل چهارم چنانچه از mongodb استفاده میکنید میتوانید با استفاده از دستور

mongodbexport

داده های خود را به فرمت csv در فایلی ذخیره نمایید .

چنانچه بخواهید خروجی mongodbexport خود را به فرمتی دیگر ذخیره نمایید می توانید با ویرایش

بخش mongodb console بگویید که با چه فرمتی میخواهید این عمل انجام گردد.

 

امیدوارم که این مقاله برای شما مفید واقع شده باشد .

خوشحال می شوم تا نظرات خودتون را برایم ارسال نمایید.

برای مشاهده نحوه  script های نویسی، می توانید به اینجا مراجعه نمایید . 

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *