টেক্সট ফাইলগুলি বিয়োগ করতে ইউনিক্সে সরঞ্জাম?


16

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

ফাইলটি মোটামুটি এরকম দেখাচ্ছে

GenericClass1; 1; 2; NA; 3; 4;
GenericClass1; 5; 6; NA; 7; 8;
GenericClass2; 1; 5; NA; 3; 8;
GenericClass2; 2; 6; NA; 4; 1;

ইত্যাদি

এটি করার জন্য কি চটজলদি উত্সাহী উপায় আছে বা আমার কি কর্কট ব্যবহার করতে হবে?

উত্তর:


28

আপনি ব্যবহার করতে পারেন grep। এটিকে ইনপুট হিসাবে ছোট ফাইলটি দিন এবং মেলানো নয় লাইনগুলি খুঁজে পেতে বলুন:

grep -vxFf file.txt bigfile.txt > newbigfile.txt

ব্যবহৃত বিকল্পগুলি হ'ল:

   -F, --fixed-strings
          Interpret PATTERN as a  list  of  fixed  strings,  separated  by
          newlines,  any  of  which is to be matched.  (-F is specified by
          POSIX.)
   -f FILE, --file=FILE
          Obtain  patterns  from  FILE,  one  per  line.   The  empty file
          contains zero patterns, and therefore matches nothing.   (-f  is
          specified by POSIX.)

   -v, --invert-match
          Invert the sense of matching, to select non-matching lines.  (-v
          is specified by POSIX.)
   -x, --line-regexp
          Select only those matches that exactly match the whole line.  
          (-x is specified by POSIX.)

ভাল, পুরোপুরি কাজ। অনেক ধন্যবাদ.
এসচার

1
এটি দুর্দান্ত যে এটি কাজ করেছে, তবে আমার কাছে মনে হয় এটি -xবিকল্পের সাথে আরও ভাল হত , যদি ছোট ফাইলের একটি লাইন আমার সাথে প্রধান ফাইলের অন্য একটি লাইনের একটি স্ট্রিংস ঘটায়। এছাড়াও, এটি খুব সম্ভব যে @ উলরিচশওয়ার্জের উত্তরটি দ্রুততর।
ধনী

18

comm তোমার বন্ধু:

NAME কম - লাইন অনুসারে দুটি সাজানো ফাইলের তুলনা করুন

সিনপসিস কম [অপশন] ... ফাইল 1 ফাইল 2

বর্ণনানুসারে বাছাই করা ফাইলগুলি FILE1 এবং FILE2 লাইন লাইন দিয়ে তুলনা করুন।

   With  no  options, produce three-column output.  Column one contains lines unique to FILE1, column two contains
   lines unique to FILE2, and column three contains lines common to both files.

   -1     suppress column 1 (lines unique to FILE1)

   -2     suppress column 2 (lines unique to FILE2)

   -3     suppress column 3 (lines that appear in both files)

( যেহেতু এটি বাছাইকে বিবেচনায় নিয়েছে commতার সম্ভবত একটি পারফরম্যান্স সুবিধা grepহবে have)

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

comm -1 -3 file.txt bigfile.txt > newbigfile.txt

2
সাজানো তালিকার জন্য কম ওভার গ্রেপ ব্যবহার সম্পর্কে ভাল পয়েন্ট। আপনি যদি একটি নির্দিষ্ট কমান্ড লাইনের উদাহরণ প্রদান করেন তবে এটি আরও ভাল উত্তর হতে পারেcomm -1 -3 file.txt bigfile.txt > newbigfile.txt
স্টিভ মিডলেগি

আমি নিশ্চিত করি যে আমি 100 এমবি-র কাছাকাছি ফাইলগুলির সাথে উপরের রিপোর্ট করা গ্রেপ কমান্ড দিয়ে চেষ্টা করেছি এবং আমার একটি "নিহত" ত্রুটি হয়েছে। কম দিয়ে চেষ্টা করা এটি সফলভাবে শেষ হয়েছে।
জিয়ানলুকা ক্যাসাটি

কমান্ড ফেরৎ পাঁচমিশালী ফাইল জন্য দরকারী অথবা আপনি দুটি ফাইলের বেশী প্রয়োজন যদি:comm -1 -3 <(sort BAD.txt GOOD.txt) <(sort FILES.txt)
odinho - Velmont
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.