সিএসভি ফাইল প্রক্রিয়াকরণের জন্য এক স্ক্রিপ্টে একাধিক সেড কমান্ড যোগ দিন


34

এর মতো একটি সিএসভি ফাইল থাকা:

HEADER
"first, column"|"second "some random quotes" column"|"third ol' column"
FOOTER

এবং ফলাফল যেমন খুঁজছেন:

HEADER
first, column|second "some random quotes" column|third ol' column

অন্য কথায় "FOOTER" অপসারণ, প্রারম্ভিক, শেষ এবং চারপাশে উদ্ধৃতি |

এখনও পর্যন্ত এই কোডটি কাজ করে:

sed '/FOOTER/d' csv > csv1 | #remove FOOTER
sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning
sed 's/\"$//' csv2 > csv3 | #remove quote at the end
sed 's/\"|\"/|/g' csv3 > csv4 #remove quotes around pipe

আপনি যেহেতু সমস্যাটি দেখছেন এটি 4 টি অতিরিক্ত ফাইল তৈরি করে।

এখানে আরও একটি সমাধান রয়েছে, যার লক্ষ্য রয়েছে অতিরিক্ত ফাইলগুলি তৈরি না করা এবং একই জিনিসটি একটি স্ক্রিপ্টে না করা। এটি খুব ভাল কাজ করে না।

#!/bin/ksh

sed '/begin/, /end/ { 
        /FOOTER/d
        s/^\"//
        s/\"$//
        s/\"|\"/|/g 
}' csv > csv4

1
যেহেতু আপনার উদ্ধৃতি রয়েছে আপনার ক্ষেত্রে ক্ষেত্রগুলিতে নতুন লাইন থাকতে পারে। আপনার sedএটি নিয়ে কাজ হবে না, কেবল সরল সিএসভি দিয়ে। এমন লাইব্রেরির সাথে এমন একটি প্রোগ্রামিং ভাষা ব্যবহার করুন যা আসল সিএসভি ফাইলগুলি (পাইথন / পার্ল / রুবি) পরিচালনা করতে পারে।
অ্যান্থন

উত্তর:


44

প্রথমত, মাইকেল যেমন দেখিয়েছেন, আপনি কেবলমাত্র এই সমস্তগুলি একটি একক কমান্ডের সাথে সংযুক্ত করতে পারেন:

sed '/^FOOTER/d; s/^\"//; s/\"$//; s/\"|\"/|/g' csv > csv1

আমি মনে করি কিছু sedবাস্তবায়ন সেগুলি মোকাবেলা করতে পারে না এবং এটির প্রয়োজন হতে পারে:

  sed -e '/^FOOTER/d' -e 's/^\"//' -e 's/\"$//' -e 's/\"|\"/|/g' csv > csv1

এটি বলেছিল, দেখে মনে হচ্ছে আপনার ক্ষেত্রগুলি সংজ্ঞায়িত হয়েছে |এবং আপনি কেবল ক্ষেত্রের মধ্যে থাকাগুলি "ছেড়ে পুরো ক্ষেত্রের চারপাশে সরাতে চান । সেক্ষেত্রে, আপনি এটি করতে পারেন:

$ sed '/FOOTER/d; s/\(^\||\)"/\1/g; s/"\($\||\)/\1/g' csv 
HEADER
first, column|second "some random quotes" column|third ol' column

বা, জিএনইউ সহ sed:

sed -r '/FOOTER/d; s/(^|\|)"/\1/g; s/"($|\|)/\1/g' csv 

আপনি পার্ল ব্যবহার করতে পারেন:

$ perl -F"|" -lane 'next if /FOOTER/; s/^"|"$// for @F; print @F' csv 
HEADER
first, column|second some random quotes column|third ol' column

13

এটিও কাজ করবে:

সেড 's / ^ "//; s /" | "/ | / জি; এস /" "$ /" /'

উদাহরণ:

$ echo '"this"|" and "ths""|" and "|" this 2"|" also "this", "thi", "and th""' | 
sed 's/^"//; s/"|"/|/g; s/""$/"/'
this| and "ths"| and | this 2| also "this", "thi", "and th"

সুন্দর সংস্করণ

sed '
s/^"//
s/"|"/|/g
s/""$/"/
$d
'

1
এটি পাদলেখ নিয়ে কাজ করে না।
টেরডন

3
তবে এটি শেষ পংক্তিটি সরিয়ে ফেলবে এর বিষয়বস্তু যাই হোক না কেন। যদি এটি না থাকে তবে FOOTERএটি পছন্দসই ডেটা সরিয়ে ফেলবে।
টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.