একটি CSV ফাইল থেকে সদৃশ এন্ট্রি সরান


13

আমি একটি [সিএসভি] ফাইল ডুপ্লিকেট ড্যাটুম পুনরায় মুদ্রিত অর্থাৎ একই তথ্য দু'বার মুদ্রিত করেছি। আমি ব্যবহার চেষ্টা করেছি সাজানোর এর uniq দ্বারা sort myfile.csv | uniq -uকিন্তু কোন পরিবর্তন নেই myfile.csv, এছাড়াও আমি চেষ্টা করেছি sudo sort myfile.csv | uniq -uকিন্তু কোন পার্থক্য।

সুতরাং বর্তমানে আমার সিএসভি ফাইলটি দেখতে এমন দেখাচ্ছে

a
a
a
b
b
c
c
c
c
c

আমি এটি দেখতে চাই

a
b
c

সাজান -u myfile.csv> tmp.csv; mv -f tmp.csv myfile.csv
আরচেমার

অনুসারে man sort, আপনি "জায়গায়" বাছাই করতে পারবেন না।
আরচেমার 12'15

আপনি টার্মিনালের উপর নির্ভর না করার চেষ্টা করতে পারেন। আপনি এই অনলাইন সরঞ্জাম পরিবর্তে চেষ্টা করে দেখতে পারেন textmechanic.com/text-tools/basic-text-tools/...
আমিনা Nuraini

উত্তর:


16

কারণটি myfile.csvপরিবর্তিত হচ্ছে না কারণ হ'ল -uবিকল্পটি কেবল অনন্য লাইনগুলি মুদ্রণ uniqকরবে । এই ফাইলে, সমস্ত লাইনগুলি সদৃশ হয় তাই সেগুলি মুদ্রিত হবে না

তবে, আরও গুরুত্বপূর্ণ, আউটপুটটি সংরক্ষণ করা হবে না myfile.csvকারণ uniqএটি কেবল এটির stdout(মুছে ফেলা হবে, আপনার কনসোল দ্বারা) print

আপনার এই জাতীয় কিছু করা দরকার:

$ sort -u myfile.csv -o myfile.csv

বিকল্পগুলির অর্থ:

  • -u - শুধুমাত্র অনন্য লাইন রাখুন
  • -o - পরিবর্তে এই ফাইলে আউটপুট stdout

আপনি man sortআরও তথ্যের জন্য দেখতে হবে ।


3

বেলমিন যেমন দেখিয়েছেন, বাছাই দুর্দান্ত। তার উত্তরটি মীমাংসিত ডেটার জন্য সেরা এবং এটি মনে রাখা এবং ব্যবহার করা সহজ।

যাইহোক, এটিও অস্থির, কারণ এটি ইনপুটটির ক্রম পরিবর্তন করে। আপনার যদি একই তথ্যটি একই ক্রমে নিয়ে যাওয়া দরকার তবে পরে ডুপ্লিকেটগুলি সরিয়ে ফেলা হয়, তবে আরও ভাল হতে পারে।

$ cat myfile.csv
c
a
c
b
b
a
c


$ awk '{if (!($0 in x)) {print $0; x[$0]=1} }' myfile.csv
c
a
b

অদ্ভুত প্রান্তের কেস, তবে এটি সময়ে সময়ে আসে।

এছাড়াও, যখন আপনি এটিতে পোকা দেওয়ার সময় যদি আপনার ডেটা ইতিমধ্যে বাছাই করা থাকে তবে আপনি কেবল ইউনিক চালাতে পারেন।

$ cat myfile.csv 
a
a
a
b
b
c
c
c
c
c


$ uniq myfile.csv 
a
b
c

আমার উভয় পরামর্শের খসড়াটি হ'ল আপনাকে একটি অস্থায়ী ফাইল ব্যবহার করতে হবে এবং সেটিকে আবার অনুলিপি করতে হবে।


2

uniq -u শুধুমাত্র অনন্য লাইন প্রিন্ট করা হবে। আপনার ইনপুটটির কোনও অনন্য লাইন নেই, তাই uniq -uকিছুই মুদ্রণ করবেন না। আপনার কেবল প্রয়োজন sort:

sort -u myfile.csv

2

আপনি যদি ফাইলটির ক্রম বজায় রাখতে চান (সাজানো নয়) তবে ডুপ্লিকেটগুলি অপসারণ করতে পারেন তবে আপনি এটিও করতে পারেন

awk '!v[$1]++' /tmp/file

উদাহরণ স্বরূপ

d
d
a
a
b
b
c
c
c
c
c

এটি আউটপুট হবে

d
a
b
c

আপনি দয়া করে সিনট্যাক্সটি প্রসারিত করতে পারেন?
সোপালাজো ডি অ্যারিরিজ

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