मैं फ़ाइल को grep
. के साथ फ़िल्टर करके ऐसा करूँगा या awk
और फिर इसे MySQL में पाइप करना (/dev/stdin
. के माध्यम से) ) कुछ इस तरह:
cat your_file.txt |
awk '/\t.+/' |
mysql -u your_username -pyour_password \
-e "LOAD DATA LOCAL INFILE '/dev/stdin' \
IGNORE INTO TABLE tablename \
COLUMNS TERMINATED BY '\t' \
LINES TERMINATED BY '\n' \
(col1, col2);" \
your_database_name
awk
. को दिया गया रेगुलर एक्सप्रेशन दूसरी पंक्ति पर बस किसी भी पंक्ति से मेल खाता है जिसमें एक टैब वर्ण होता है जिसके बाद एक या अधिक वर्ण होते हैं। हो सकता है कि आप अपनी ज़रूरतों के अनुसार इसमें बदलाव करना चाहें।
संपादित करें: एक और संभावना मेरे सामने आई। आप SET
. का उपयोग कर सकते हैं खाली कॉलम पर कुछ जादुई मान सेट करने के लिए और BEFORE INSERT
तालिका पर ट्रिगर करें जो उस मान को देखने पर एक पंक्ति में जमानत देगा। मुझे ट्रिगर्स के साथ अधिक अनुभव नहीं है, लेकिन मुझे लगता है कि कुछ इस तरह काम करना चाहिए:
CREATE TRIGGER skip_magic_rows
BEFORE INSERT ON tablename
FOR EACH ROW
BEGIN
IF NEW.col2 = 'IDSPISPOPD4815162342' THEN # Some unlikely magic string
# Trigger an error, which will cause the INSERT to fail†
# If you have MySQL < 5.5 this is kludgy -- see Note 1
DROP TABLE `Skipped row`
# OR
# In MySQL >= 5.5 you can send a signal--'45000' is a generic error
SIGNAL SQLSTATE '45000' SET message_text = 'Skipped row'; # See Note 2
END IF
END
;
†: दस्तावेज़ के अनुसार :
फिर...
LOAD DATA LOCAL INFILE 'file'
IGNORE INTO TABLE tablename
COLUMNS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
(col1, @var2)
SET col2 = IF(@var2 IN (NULL, ''), 'IDSPISPOPD4815162342', @var2)
;
आशा है कि यह मददगार होगा!
नोट 1: प्रासंगिक ब्लॉग पोस्ट और टिप्पणियां
नोट 2: प्रासंगिक SO थ्रेड