মাথা / লেজ নেতিবাচক যুক্তি


14

এই প্রশ্নের বিভিন্ন রূপ অবশ্যই বিভিন্ন জায়গায় বেশ কয়েকবার জিজ্ঞাসা করা হয়েছে, তবে আমি Mভাগ্য ছাড়াই কোনও ফাইল থেকে শেষ পংক্তিগুলি সরিয়ে দেওয়ার চেষ্টা করছি ।

দ্বিতীয় সর্বোচ্চ ভোট উত্তর মধ্যে এই প্রশ্নের পর ফাইলের শেষ লাইন পরিত্রাণ পেতে করছেন পরামর্শ দেওয়া হচ্ছে:

head -n -1 foo.txt > temp.txt

যাইহোক, আমি যখন ওএসএক্স এবং জেডএস-এ চেষ্টা করি তখন আমি পাই:

head: illegal line count -- -1

কেন এমন? আমি কিভাবে অপসারণ করতে পারেন M গত লাইন এবং প্রথম N কোনো নির্দিষ্ট ফাইলের লাইনের?



1
এর আউটপুট কি head --version? আপনি কোন সিস্টেমটি ব্যবহার করছেন?
জোফেল

@ জোফেল head --versionআসলে ত্রুটি দেয়।
আমেলিও ওয়াজকেজ-রেইনা

উত্তর:


20

আপনি এর সাথে প্রথম 12 টি লাইন মুছে ফেলতে পারেন:

tail -n +13

(যার অর্থ 13 তম লাইন থেকে মুদ্রণ করা))

headজিএনইউ headসমর্থন মত কিছু বাস্তবায়ন :

head -n -12

তবে এটি মানক নয়।

tail -r file | tail -n +12 | tail -r

সেই সিস্টেমে কাজ করবে tail -r(জিএনইউ দেখুন tac) তবে সাব-অনুকূল is

কোথায় n1:

sed '$d' file

আপনি এটি করতে পারেন:

sed '$d' file | sed '$d'

2 লাইন অপসারণ, কিন্তু এটি অনুকূল নয়।

আপনি করতে পারেন:

sed -ne :1  -e 'N;1,12b1' -e 'P;D'

তবে সাবধান থাকুন যে কয়েকটি বাস্তবায়নের সাথে এন এর বড় মানগুলির সাথে কাজ করবে না sed

সহ awk:

awk -v n=12 'NR>n{print line[NR%n]};{line[NR%n]=$0}'

mশুরু nথেকে এবং শেষ থেকে লাইনগুলি সরাতে :

awk -v m=6 -v n=12 'NR<=m{next};NR>n+m{print line[NR%n]};{line[NR%n]=$0}'

sed 'x;1d;$d'শেষ দুটি লাইন পেতে ব্যবহৃত হতে পারে। এবং ডাব্লু / Nএর পরে 1dদু'জনের কিছুটা তার চেয়ে সামান্য বেশি পেতে ব্যবহৃত হতে পারে, যদিও এই মুহুর্তে এটি N;P;Dআপনি ইতিমধ্যে প্রস্তাবিত লুপটির কোনও সুবিধা দেয় না ।
মাইকজার্ভ

আপনাকে ধন্যবাদ - শেষ আদেশটি অত্যন্ত সহায়ক। একটি গ্রীষ্মকালীন ছোট সতর্কীকরণ: এটি কাজ যখন নেই mবা nআছে 0। অন্যথায় এটি নিখুঁত হবে।
আমেলিও ওয়াজকেজ-রেইনা

2

প্রথম এন লাইন এবং শেষ এম লাইনগুলি সরাতে আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন।

সহ N=5, M=7এবং ফাইল test.txt:

sed -n -e "6,$(($(wc -l < test.txt) - 7))p" test.txt

কমান্ডটি এন + 1 থেকে লাস্টলাইন-এম পর্যন্ত সমস্ত লাইন মুদ্রণ করে।

আর একটি বিকল্প পাইথন ব্যবহার করা:

python -c 'import sys;print "".join(sys.stdin.readlines()[5:-7]),' < test.txt

1

আপনি এই Mফাইলটি থেকে সর্বশেষ (এখানে এম = 100) লাইনগুলি সরিয়ে ফেলতে পারেন :

head -$(($(wc -l < foo.txt) - 100)) foo.txt > temp.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.