сравнить файлы в сценарии оболочки с md5sum и создать CSV для измененного файла - PullRequest
1 голос
/ 12 февраля 2020

Я очень новичок в сценарии оболочки и нашел способ сравнить файлы с помощью сценария оболочки при использовании md5sum.

Я хочу сравнить файлы Options_old и Options_new в сценарии оболочки и определите новое значение поля Ticker, добавленное в новый файл. Для этого нового значения поля тикера я хочу создать файл CSV.

Например, если мы сравним Options_old и Options_new файлы и проверим, есть ли в файле Options_new новое значение поля тикера 510051 2 C2.50 и 510052 2 P2.50 добавлено, и я хочу создать и напечатать это значение в файле CSV.

Файл Options_new.out.gz * Файл 1015 *

START-OF-FILE
PROGRAMNAME=getdata
DATEFORMAT=yyyymmdd
START-OF-FIELDS
TICKER
EXCH_CODE
END-OF-FIELDS
TIMESTARTED=Wed Feb 12 19:30:38 JST 2020
START-OF-DATA
510051 CH 02/26/20 C2.5 Equity|0|75|510051 2 C2.50|CH
510052 CH 02/26/20 P2.5 Equity|0|75|510052 2 P2.50|CH
510050 CH 02/26/20 C2.55 Equity|0|75|510050 2 C2.55|CH
510050 CH 02/26/20 P2.55 Equity|0|75|510050 2 P2.55|CH
END-OF-DATA
DATARECORDS=1140
TIMEFINISHED=Wed Feb 12 19:32:50 JST 2020
END-OF-FILE

Файл Options_old.out.gz

START-OF-FILE
PROGRAMNAME=getdata
DATEFORMAT=yyyymmdd
START-OF-FIELDS
TICKER
EXCH_CODE
END-OF-FIELDS
TIMESTARTED=Wed Feb 12 19:30:38 JST 2020
START-OF-DATA
510050 CH 02/26/20 C2.5 Equity|0|75|510050 2 C2.50|CH
510050 CH 02/26/20 P2.5 Equity|0|75|510050 2 P2.50|CH
510050 CH 02/26/20 C2.55 Equity|0|75|510050 2 C2.55|CH
510050 CH 02/26/20 P2.55 Equity|0|75|510050 2 P2.55|CH
END-OF-DATA
DATARECORDS=1140
TIMEFINISHED=Wed Feb 12 19:32:50 JST 2020
END-OF-FILE

Я запустил код, но не понял, как сравнить конкретные поле, а затем создать CSV-файл:

#!/bin/sh

OLD_PATH="/opt/old"
NEW_PATH="/opt/new"

FILES="${FILES} Options_new.out.gz Options_old.out.gz"

for FILE in `echo ${FILES}`
do
   MD5SUM_NEW=`md5sum ${OLD_PATH}/${FILE} | awk '{print $1}'`
   MD5SUM_OLD=`md5sum ${NEW_PATH}/${FILE} | awk '{print $1}'`

   if [ "${MD5SUM_NEW}" != "${MD5SUM_OLD}" ]; then
      echo "Found new Version of ${FILE}"
#currently i am comparing the data from the whole file but i want to compare the data only for the Ticker value in the both files

#here create new csv file with the new ticker value found in Options_new.out.gz file

   fi

exit ${EXIT}

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Пища для размышлений может быть запущена, чтобы проверить, отличается ли она, если это так, печатает строки с битами, которые вы хотели сохранить в csv

#!/bin/bash

#Check if file are different then grep for word differ 
#normally would spit out Files file2 and file1 differ
# flags are -F fixed string, -w match only full words
# -q quiet ie no output to stdout (screen)

if $(diff -q "$2" "$1" | grep -Fwq "differ")
then
    #create a var of the changed text, awk looking at 
    #begining of line to see if begins with > and then
    #output the full fine for awk to then select the 
    #vars you want
    changeSyn=$(diff file2 file1 | awk '$1 ~ /^ *>/' | awk '{print $2","$5","$7 }')
    #same again only for new vars
    addedSyn=$(diff file2 file1 | awk '$1 ~ /^ *</' | awk '{print $2","$5","$7 }')
    echo "$changeSyn"
    echo "$addedSyn"
else
    echo "No change"
fi
0 голосов
/ 13 февраля 2020

Попробуйте использовать сочетание для визуального

 meld file1 file2

или

diff для командной строки

 diff file1 file2
 10,11c10,11
 < 510051 CH 02/26/20 C2.5 Equity|0|75|510051 2 C2.50|CH
 < 510052 CH 02/26/20 P2.5 Equity|0|75|510052 2 P2.50|CH
 ---
 > 510050 CH 02/26/20 C2.5 Equity|0|75|510050 2 C2.50|CH
 > 510050 CH 02/26/20 P2.5 Equity|0|75|510050 2 P2.50|CH
...