ডিরেক্টরিতে প্রতিটি ফাইল থেকে প্রথম লাইনটি কীভাবে নির্বাচন করবেন এবং এটি একটি নতুন পাঠ্য ফাইলে মুদ্রণ করবেন


13

আমার বেশ কয়েকটি .txtফাইল সহ একটি ডিরেক্টরি রয়েছে ।

এই ফাইলগুলির প্রত্যেকটি থেকে, আমি প্রথম লাইনটি নির্বাচন করতে এবং একটি নতুন .txtফাইলে মুদ্রণ করতে চাই (সমস্ত প্রথম লাইনের একটি তালিকা পেতে)।

আমি এটি চেষ্টা করেছিলাম awkএবং sedকমান্ডগুলি দিয়ে এবং এটি একটি লুপের সাথে একত্রিত করেছি, তবে কোনও সাফল্য নেই।


1
আপনি একজন খ্যাতিমান 6 ব্যবহারকারী হিসাবে: নীচের যে কোনও আনসার আপনাকে সহায়তা করেছে, তার পাঠ্যের বামদিকে ধূসর click ক্লিক করতে ভুলবেন না , যার অর্থ হ্যাঁ, এই উত্তরটি বৈধ ! ;-)
ফেব্বী

উত্তর:


21

ব্যবহার head:

head -n1 -q *.txt > new-file
  • -n1headকেবল প্রথম লাইনটি বের করতে বলে ।
  • -q ফাইলের নাম মুদ্রণ না করতে মাথা বলে।

9

ব্যবহার grep:

grep -m 1 '.' *.txt >output.file

grepযে কোনও চরিত্রের সাথে মেলে এবং প্রথম ম্যাচের পরে প্রস্থান করবে অর্থাৎ grepসমস্ত ইনপুট ফাইলের প্রথম লাইন আউটপুট আসবে এবং আমরা সেগুলি সংরক্ষণ করছি out.txt


1
আমি এটি পছন্দ করি, এটি একটি দুর্দান্ত ছোট্ট হ্যাক।
হাশিম

2

শুধুমাত্র বাশ ব্যবহার:

for f in *.txt; do <"$f" read line; printf "$line\n" >>new.txt; done
  • *.txt.txtবর্তমান ওয়ার্কিং ডিরেক্টরিতে শেষ হওয়া ফোল্ডার / ফাইলগুলির তালিকায় প্রসারিত হয় (যেহেতু কেবলমাত্র ফোল্ডারগুলি শেষ হয় তবে .txtএটি উদ্বেগের বিষয় নয়);
  • <"$f" read lineসঞ্চিত ফাইল পাথ থেকে একটি লাইন পড়ে fএবং এতে সঞ্চয় করে line;
  • printf "$line\n" >>new.txt: বিষয়বস্তুর appends lineকরতে new.txt;
% cat foo.txt 
line #1 in foo
line #2 in foo
line #3 in foo

% cat bar.txt
line #1 in bar
line #2 in bar
line #3 in bar

% for f in *.txt; do <"$f" read line; printf "$line\n" >>new.txt; done

% cat new.txt 
line #1 in bar
line #1 in foo

কোস, কিছুটা লম্বা তবে এখানে +1 ..
হিমাইল

@ হেইমাইল তবে এটি কেবল বাশ। ;)
kos


1
@ হাইমাইল ধন্যবাদ: ডি। সত্যি বলতে আমি পাগল মত সাইট চেক আউট করার করছি শুধু একটি প্রশ্ন XD রক্ষা অনুরোধে জন্য
কস

0

আপনি এটি দিয়ে চেষ্টা করেছেন awk, এখানে একটি awkসংস্করণ

awk 'FNR==1 {print} {nextfile}' *.txt > out

0

এডাব্লুকে দিয়ে আরেকটি পন্থা হ'ল এডাব্লুকে প্রিন্ট করতে বলুন তবে তারপরে তাত্ক্ষণিকভাবে পরবর্তী ফাইলটিতে যান

tmp:$ touch file1 file2 file3

tmp:$ printf  "Line 1 \n Line 2" | tee file1 file2 file3
Line 1 
 Line 2
tmp:$ awk '{print;nextfile}' file1 file2 file3
Line 1 
Line 1 
Line 1

sedনির্দিষ্ট লাইন মুদ্রণের অনুমতি দেয়। এখানে আমি এটি একত্রিত করেছিfind

tmp:$ find . -name "file*" -exec  sed -n '1p' {} \;                            
Line 1 
Line 1 
Line 1 

এবং perl:

tmp:$ find . -name "file*"  -exec perl -ne 'print  if 1..1' {} \;              
Line 1 
Line 1 
Line 1 

এবং শেষ কিন্তু না অন্তত , grep

tmp:$ grep -n 1 file1 file2 file3                                              
file1:1:Line 1 
file2:1:Line 1 
file3:1:Line 1 

একক ফাইলে সমস্ত কিছু সংরক্ষণ করা > outputFile.txtএই কমান্ডগুলির শেষে যুক্ত হওয়ার বিষয় ।

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