#!/bin/bash
# ideone boilerplate - we can't write files in the home directory;
# so create a temporary directory for our files instead
t=$(mktemp -d -t ideone.XXXXXXXXXXXX) || exit
trap 'rm -rf "$t"' ERR EXIT
cd "$t"
cat <<\: >web_file.csv
Inv_SKU,Web_SKU,Brand,Barcode
225481-34,225481-34,brand1,987654321
0486592,0486592,brand2,654871233
AB56412,AB56412,brand2,651273214
LL-123456,LL-123456,brand3,748912349
JLPD-65,JLPD-65,brand6,341541648
20143966,20143966,brand3,82193714
39585824,39585824,brand5,36837329
78066099,78066099,brand4,98398987
44381051,44381051,brand1,9090428
86529443,86529443,brand4,6861670
DF 5645 12,DF 5645 12,brand1,489456138
9845671325,9845671325,brand4,498451315
59634923,59634923,brand4,35828574
85290760,85290760,brand2,64562216
41217184,41217184,brand4,12816236
AE48915,AE48915,brand1,342536125
93981723,93981723,brand2,58155601
:
cat <<\: >inv_file.csv
Inv_SKU,Web_SKU,Brand,Barcode
0486592,0486592,brand2,654871233
LL-123456,LL-123456,brand3,748912349
9845671325,9845671325,brand4,498451315
OI3248967,OI3248967,brand2,891513211
AB56412,AB56412,brand2,651273214
DF 5645 12,DF 5645 12,brand1,489456138
225481-34,225481-34,brand1,987654321
123456789,123456789,brand5,654986413
9841531,9841531,brand3,543254512
AE48915,AE48915,brand1,342536125
JLPD-65,JLPD-65,brand6,341541648
MMMM,MMMM,brand7,384941542
23481-4323,23481-4323,brand3,489123157
98451321,98451321,brand4,498121354
23454152,23454152,brand2,894165123
10275690,10275690,brand2,25612670
20143966,20143966,brand3,82193714
59634923,59634923,brand4,35828574
65800253,65800253,brand5,72318134
67722613,67722613,brand6,93290033
92617199,92617199,brand7,95078073
15379652,15379652,brand1,56281224
85290760,85290760,brand2,64562216
78066099,78066099,brand4,98398987
41217184,41217184,brand4,12816236
87152990,87152990,brand4,95058925
73813369,73813369,brand1,2395994
50201544,50201544,brand1,9167830
93981723,93981723,brand2,58155601
39585824,39585824,brand5,36837329
29082963,29082963,brand3,23393947
23856043,23856043,brand8,57295562
74249006,74249006,brand8,83219065
94376071,94376071,brand8,94887004
14553763,14553763,brand8,14223230
44381051,44381051,brand1,9090428
7598085,7598085,brand1,48967969
56383025,56383025,brand2,68864452
44338055,44338055,brand4,47043853
86529443,86529443,brand4,6861670
:
touch result.csv
cat <<\: >prog.py
with open('inv_file.csv', 'r') as f1, open('web_file.csv', 'r') as f2:
inv_file = f1.readlines()
web_file = f2.readlines()
with open('result.csv', 'r+') as f3:
result_file = f3.readlines()
while len(result_file) < len(web_file):
for row in inv_file:
for row1 in web_file:
if row[0] in row1[0]:
f3.write(row1)
break
:
cat <<\: >prog2.py
import csv
with open('inv_file.csv', 'r') as f1,\
open('web_file.csv', 'r') as f2, \
open('result.csv', 'a') as f3:
inv = [x[0] for x in csv.reader(f1)]
writer = csv.writer(f3)
for row in csv.reader(f2):
if row[0] in inv:
writer.writerow(row)
:
echo '** Original code'
python3 prog.py
cat result.csv
echo '** Duplicates'
sort result.csv | uniq -d
rm result.csv
echo '** Fixed'
python3 prog2.py
cat result.csv
echo '** Duplicates'
sort result.csv | uniq -d
IyEvYmluL2Jhc2gKCiMgaWRlb25lIGJvaWxlcnBsYXRlIC0gd2UgY2FuJ3Qgd3JpdGUgZmlsZXMgaW4gdGhlIGhvbWUgZGlyZWN0b3J5OwojIHNvIGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIG91ciBmaWxlcyBpbnN0ZWFkCnQ9JChta3RlbXAgLWQgLXQgaWRlb25lLlhYWFhYWFhYWFhYWCkgfHwgZXhpdAp0cmFwICdybSAtcmYgIiR0IicgRVJSIEVYSVQKY2QgIiR0IgoKY2F0IDw8XDogPndlYl9maWxlLmNzdgpJbnZfU0tVLFdlYl9TS1UsQnJhbmQsQmFyY29kZQoyMjU0ODEtMzQsMjI1NDgxLTM0LGJyYW5kMSw5ODc2NTQzMjEKMDQ4NjU5MiwwNDg2NTkyLGJyYW5kMiw2NTQ4NzEyMzMKQUI1NjQxMixBQjU2NDEyLGJyYW5kMiw2NTEyNzMyMTQKTEwtMTIzNDU2LExMLTEyMzQ1NixicmFuZDMsNzQ4OTEyMzQ5CkpMUEQtNjUsSkxQRC02NSxicmFuZDYsMzQxNTQxNjQ4CjIwMTQzOTY2LDIwMTQzOTY2LGJyYW5kMyw4MjE5MzcxNAozOTU4NTgyNCwzOTU4NTgyNCxicmFuZDUsMzY4MzczMjkKNzgwNjYwOTksNzgwNjYwOTksYnJhbmQ0LDk4Mzk4OTg3CjQ0MzgxMDUxLDQ0MzgxMDUxLGJyYW5kMSw5MDkwNDI4Cjg2NTI5NDQzLDg2NTI5NDQzLGJyYW5kNCw2ODYxNjcwCkRGIDU2NDUgMTIsREYgNTY0NSAxMixicmFuZDEsNDg5NDU2MTM4Cjk4NDU2NzEzMjUsOTg0NTY3MTMyNSxicmFuZDQsNDk4NDUxMzE1CjU5NjM0OTIzLDU5NjM0OTIzLGJyYW5kNCwzNTgyODU3NAo4NTI5MDc2MCw4NTI5MDc2MCxicmFuZDIsNjQ1NjIyMTYKNDEyMTcxODQsNDEyMTcxODQsYnJhbmQ0LDEyODE2MjM2CkFFNDg5MTUsQUU0ODkxNSxicmFuZDEsMzQyNTM2MTI1CjkzOTgxNzIzLDkzOTgxNzIzLGJyYW5kMiw1ODE1NTYwMQo6CgpjYXQgPDxcOiA+aW52X2ZpbGUuY3N2Ckludl9TS1UsV2ViX1NLVSxCcmFuZCxCYXJjb2RlCjA0ODY1OTIsMDQ4NjU5MixicmFuZDIsNjU0ODcxMjMzCkxMLTEyMzQ1NixMTC0xMjM0NTYsYnJhbmQzLDc0ODkxMjM0OQo5ODQ1NjcxMzI1LDk4NDU2NzEzMjUsYnJhbmQ0LDQ5ODQ1MTMxNQpPSTMyNDg5NjcsT0kzMjQ4OTY3LGJyYW5kMiw4OTE1MTMyMTEKQUI1NjQxMixBQjU2NDEyLGJyYW5kMiw2NTEyNzMyMTQKREYgNTY0NSAxMixERiA1NjQ1IDEyLGJyYW5kMSw0ODk0NTYxMzgKMjI1NDgxLTM0LDIyNTQ4MS0zNCxicmFuZDEsOTg3NjU0MzIxCjEyMzQ1Njc4OSwxMjM0NTY3ODksYnJhbmQ1LDY1NDk4NjQxMwo5ODQxNTMxLDk4NDE1MzEsYnJhbmQzLDU0MzI1NDUxMgpBRTQ4OTE1LEFFNDg5MTUsYnJhbmQxLDM0MjUzNjEyNQpKTFBELTY1LEpMUEQtNjUsYnJhbmQ2LDM0MTU0MTY0OApNTU1NLE1NTU0sYnJhbmQ3LDM4NDk0MTU0MgoyMzQ4MS00MzIzLDIzNDgxLTQzMjMsYnJhbmQzLDQ4OTEyMzE1Nwo5ODQ1MTMyMSw5ODQ1MTMyMSxicmFuZDQsNDk4MTIxMzU0CjIzNDU0MTUyLDIzNDU0MTUyLGJyYW5kMiw4OTQxNjUxMjMKMTAyNzU2OTAsMTAyNzU2OTAsYnJhbmQyLDI1NjEyNjcwCjIwMTQzOTY2LDIwMTQzOTY2LGJyYW5kMyw4MjE5MzcxNAo1OTYzNDkyMyw1OTYzNDkyMyxicmFuZDQsMzU4Mjg1NzQKNjU4MDAyNTMsNjU4MDAyNTMsYnJhbmQ1LDcyMzE4MTM0CjY3NzIyNjEzLDY3NzIyNjEzLGJyYW5kNiw5MzI5MDAzMwo5MjYxNzE5OSw5MjYxNzE5OSxicmFuZDcsOTUwNzgwNzMKMTUzNzk2NTIsMTUzNzk2NTIsYnJhbmQxLDU2MjgxMjI0Cjg1MjkwNzYwLDg1MjkwNzYwLGJyYW5kMiw2NDU2MjIxNgo3ODA2NjA5OSw3ODA2NjA5OSxicmFuZDQsOTgzOTg5ODcKNDEyMTcxODQsNDEyMTcxODQsYnJhbmQ0LDEyODE2MjM2Cjg3MTUyOTkwLDg3MTUyOTkwLGJyYW5kNCw5NTA1ODkyNQo3MzgxMzM2OSw3MzgxMzM2OSxicmFuZDEsMjM5NTk5NAo1MDIwMTU0NCw1MDIwMTU0NCxicmFuZDEsOTE2NzgzMAo5Mzk4MTcyMyw5Mzk4MTcyMyxicmFuZDIsNTgxNTU2MDEKMzk1ODU4MjQsMzk1ODU4MjQsYnJhbmQ1LDM2ODM3MzI5CjI5MDgyOTYzLDI5MDgyOTYzLGJyYW5kMywyMzM5Mzk0NwoyMzg1NjA0MywyMzg1NjA0MyxicmFuZDgsNTcyOTU1NjIKNzQyNDkwMDYsNzQyNDkwMDYsYnJhbmQ4LDgzMjE5MDY1Cjk0Mzc2MDcxLDk0Mzc2MDcxLGJyYW5kOCw5NDg4NzAwNAoxNDU1Mzc2MywxNDU1Mzc2MyxicmFuZDgsMTQyMjMyMzAKNDQzODEwNTEsNDQzODEwNTEsYnJhbmQxLDkwOTA0MjgKNzU5ODA4NSw3NTk4MDg1LGJyYW5kMSw0ODk2Nzk2OQo1NjM4MzAyNSw1NjM4MzAyNSxicmFuZDIsNjg4NjQ0NTIKNDQzMzgwNTUsNDQzMzgwNTUsYnJhbmQ0LDQ3MDQzODUzCjg2NTI5NDQzLDg2NTI5NDQzLGJyYW5kNCw2ODYxNjcwCjoKCnRvdWNoIHJlc3VsdC5jc3YKCmNhdCA8PFw6ID5wcm9nLnB5CndpdGggb3BlbignaW52X2ZpbGUuY3N2JywgJ3InKSBhcyBmMSwgb3Blbignd2ViX2ZpbGUuY3N2JywgJ3InKSBhcyBmMjoKICAgIGludl9maWxlID0gZjEucmVhZGxpbmVzKCkKICAgIHdlYl9maWxlID0gZjIucmVhZGxpbmVzKCkKCgp3aXRoIG9wZW4oJ3Jlc3VsdC5jc3YnLCAncisnKSBhcyBmMzoKICAgIHJlc3VsdF9maWxlID0gZjMucmVhZGxpbmVzKCkKCiAgICB3aGlsZSBsZW4ocmVzdWx0X2ZpbGUpIDwgbGVuKHdlYl9maWxlKToKICAgICAgICBmb3Igcm93IGluIGludl9maWxlOgogICAgICAgICAgICBmb3Igcm93MSBpbiB3ZWJfZmlsZToKICAgICAgICAgICAgICAgIGlmIHJvd1swXSBpbiByb3cxWzBdOgogICAgICAgICAgICAgICAgICAgIGYzLndyaXRlKHJvdzEpCiAgICAgICAgYnJlYWsKOgoKY2F0IDw8XDogPnByb2cyLnB5CmltcG9ydCBjc3YKCndpdGggb3BlbignaW52X2ZpbGUuY3N2JywgJ3InKSBhcyBmMSxcCiAgICAgb3Blbignd2ViX2ZpbGUuY3N2JywgJ3InKSBhcyBmMiwgXAogICAgIG9wZW4oJ3Jlc3VsdC5jc3YnLCAnYScpIGFzIGYzOgogIGludiA9IFt4WzBdIGZvciB4IGluIGNzdi5yZWFkZXIoZjEpXQogIHdyaXRlciA9IGNzdi53cml0ZXIoZjMpCiAgZm9yIHJvdyBpbiBjc3YucmVhZGVyKGYyKToKICAgIGlmIHJvd1swXSBpbiBpbnY6CiAgICAgICAgd3JpdGVyLndyaXRlcm93KHJvdykKOgoKZWNobyAnKiogT3JpZ2luYWwgY29kZScKCnB5dGhvbjMgcHJvZy5weQoKY2F0IHJlc3VsdC5jc3YKCmVjaG8gJyoqIER1cGxpY2F0ZXMnCgpzb3J0IHJlc3VsdC5jc3YgfCB1bmlxIC1kCgpybSByZXN1bHQuY3N2CgplY2hvICcqKiBGaXhlZCcKCnB5dGhvbjMgcHJvZzIucHkKCmNhdCByZXN1bHQuY3N2CgplY2hvICcqKiBEdXBsaWNhdGVzJwoKc29ydCByZXN1bHQuY3N2IHwgdW5pcSAtZAo=
** Original code
Inv_SKU,Web_SKU,Brand,Barcode
0486592,0486592,brand2,654871233
LL-123456,LL-123456,brand3,748912349
9845671325,9845671325,brand4,498451315
93981723,93981723,brand2,58155601
AB56412,AB56412,brand2,651273214
AE48915,AE48915,brand1,342536125
DF 5645 12,DF 5645 12,brand1,489456138
225481-34,225481-34,brand1,987654321
20143966,20143966,brand3,82193714
9845671325,9845671325,brand4,498451315
93981723,93981723,brand2,58155601
AB56412,AB56412,brand2,651273214
AE48915,AE48915,brand1,342536125
JLPD-65,JLPD-65,brand6,341541648
225481-34,225481-34,brand1,987654321
20143966,20143966,brand3,82193714
9845671325,9845671325,brand4,498451315
93981723,93981723,brand2,58155601
225481-34,225481-34,brand1,987654321
20143966,20143966,brand3,82193714
225481-34,225481-34,brand1,987654321
20143966,20143966,brand3,82193714
59634923,59634923,brand4,35828574
9845671325,9845671325,brand4,498451315
93981723,93981723,brand2,58155601
86529443,86529443,brand4,6861670
85290760,85290760,brand2,64562216
78066099,78066099,brand4,98398987
44381051,44381051,brand1,9090428
41217184,41217184,brand4,12816236
86529443,86529443,brand4,6861670
85290760,85290760,brand2,64562216
78066099,78066099,brand4,98398987
59634923,59634923,brand4,35828574
9845671325,9845671325,brand4,498451315
93981723,93981723,brand2,58155601
39585824,39585824,brand5,36837329
225481-34,225481-34,brand1,987654321
20143966,20143966,brand3,82193714
225481-34,225481-34,brand1,987654321
20143966,20143966,brand3,82193714
78066099,78066099,brand4,98398987
9845671325,9845671325,brand4,498451315
93981723,93981723,brand2,58155601
44381051,44381051,brand1,9090428
41217184,41217184,brand4,12816236
78066099,78066099,brand4,98398987
59634923,59634923,brand4,35828574
44381051,44381051,brand1,9090428
41217184,41217184,brand4,12816236
86529443,86529443,brand4,6861670
85290760,85290760,brand2,64562216
** Duplicates
20143966,20143966,brand3,82193714
225481-34,225481-34,brand1,987654321
41217184,41217184,brand4,12816236
44381051,44381051,brand1,9090428
59634923,59634923,brand4,35828574
78066099,78066099,brand4,98398987
85290760,85290760,brand2,64562216
86529443,86529443,brand4,6861670
93981723,93981723,brand2,58155601
9845671325,9845671325,brand4,498451315
AB56412,AB56412,brand2,651273214
AE48915,AE48915,brand1,342536125
** Fixed
Inv_SKU,Web_SKU,Brand,Barcode
225481-34,225481-34,brand1,987654321
0486592,0486592,brand2,654871233
AB56412,AB56412,brand2,651273214
LL-123456,LL-123456,brand3,748912349
JLPD-65,JLPD-65,brand6,341541648
20143966,20143966,brand3,82193714
39585824,39585824,brand5,36837329
78066099,78066099,brand4,98398987
44381051,44381051,brand1,9090428
86529443,86529443,brand4,6861670
DF 5645 12,DF 5645 12,brand1,489456138
9845671325,9845671325,brand4,498451315
59634923,59634923,brand4,35828574
85290760,85290760,brand2,64562216
41217184,41217184,brand4,12816236
AE48915,AE48915,brand1,342536125
93981723,93981723,brand2,58155601
** Duplicates