প্রথম এবং শেষ লাইন ছাড়াই ফাইল সামগ্রী মুদ্রণ করুন


54

প্রথম এবং শেষ রেখাগুলি বাদ দিয়ে কোনও ফাইল প্রতিধ্বনিত করার কি সহজ উপায় আছে? আমি থেকে বংশীধ্বনিতুল্য দিকে তাকিয়ে ছিল headমধ্যে tail, কিন্তু তাদের জন্য মনে হয় আমি গোড়া থেকে মোট লাইন জানেন করতে হবে। আমিও তাকিয়ে ছিলাম split, কিন্তু এটির সাথে এটি করার কোনও উপায় আমি দেখতে পাচ্ছি না।

উত্তর:


97

কেবল sedকোনও পাইপ ছাড়াই:

sed '1d;$d' file.txt

বিঃদ্রঃ

  • 1প্রথম লাইন মানে
  • dমানে মোছা
  • ; 2 কমান্ডের জন্য বিভাজক
  • $শেষ লাইন মানে

36

আপনাকে আগাম লাইনের সংখ্যা জানার দরকার নেই। tailএবং headযথাক্রমে ফাইলের শুরু বা শেষ থেকে অফসেট নিতে পারে।

এই পাইপটি ফাইলের দ্বিতীয় লাইনে শুরু হয় (প্রথম লাইনটি এড়িয়ে চলে) এবং শেষের দিকে কিন্তু একটিতে থামে (চূড়ান্ত লাইনটি এড়িয়ে যাওয়া)। শুরুতে বা শেষে একাধিক লাইন এড়াতে, সেই অনুযায়ী সংখ্যাগুলি সামঞ্জস্য করুন।

tail -n +2 file.txt | head -n -1

অন্যভাবে এটি করা, অবশ্যই একইভাবে কাজ করে:

head -n -1 file.txt | tail -n +2

কেন জানি না তবে উবুন্টু 14.04.2LTS- তে head -n -1আমার .txtফাইলের প্রথম এবং শেষ লাইনটি সরিয়ে দেয় ।
সোপালাজো ডি অ্যারিরিজ

9

এটি দিয়ে কীভাবে করা যায় তা এখানে awk:

awk 'NR>2 {print t} {t=$0}'

এর জন্য অন্য একটি উপায় sed:

sed '1d;x' file.txt

xঅ্যাডভান্সড sedকমান্ড, এটি আগেরটির সাথে বর্তমান লাইনটি স্যুইচ করে: কার্ফারটি বাফারে যায় এবং পূর্ববর্তী পর্দায় যায় এবং এভাবে sedলাইনে স্ট্রিম লাইন প্রক্রিয়াকরণের সময় (এই কারণেই প্রথম লাইনটি ফাঁকা হবে)।

awkপ্রতিটি পদক্ষেপের (লাইন) সমাধানটি চলতি রেখাকে ভেরিয়েবলের মধ্যে রাখে এবং দ্বিতীয় লাইনটি পেরিয়ে যাওয়ার পরে এটি মুদ্রণ শুরু করে। সুতরাং, আমরা পর্দায় দ্বিতীয় থেকে শেষ কিন্তু একের লাইনগুলির শিটফাইড অনুক্রম পেয়েছি। শেষ লাইনটি বাদ দেওয়া হয়েছে কারণ লাইনটি ভেরিয়েবলের মধ্যে রয়েছে এবং কেবলমাত্র পরবর্তী ধাপে মুদ্রণ করা উচিত, তবে সমস্ত পদক্ষেপ ইতিমধ্যে শেষ হয়ে গেছে এবং আমরা পর্দায় কখনও লাইনটি দেখতে পাই না।

একই ধারণা perl:

perl -ne 'print $t if $.>2 ; $t=$_' file.txt

$.লাইন নম্বর এবং $_ বর্তমান লাইনের জন্য দাঁড়িয়েছে । কাঠামোর
perl -nজন্য শর্টকাট while(<..>) {..}এবং -eইনলাইন স্ক্রিপ্টের জন্য।


2

পাইথনে আমি এটি করতাম।

#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
    L = []
    for line in f:
        line = re.sub(r'\n', r'', line)
        L.append(line)
    print('\n'.join(L[1:-1]))

উপরের কোডটি একটি ফাইলে পেস্ট করুন এবং নাম হিসাবে দিন script.py। আপনি যে ফাইলটি দিয়ে পরীক্ষা করতে চান তার বিপরীতে স্ক্রিপ্টটি চালান।

python3 script.py /path/to/the/file

উদাহরণ:

$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana

2

ম্যাক ব্যবহারকারীদের জন্য:

ম্যাক অন, head -n -1কাজ করে না। পরিবর্তে, ফাইলটি বিপরীত করুন, প্রথম লাইনটি কেটে ফেলুন, তারপরে আবার বিপরীত করুন:

tail -r file.txt | tail -n +2 | tail -r

ব্যাখ্যা:

  1. tail -r : এটির ইনপুট লাইনের ক্রমকে বিপরীত করে

  2. tail -n +2 : এর ইনপুটটিতে দ্বিতীয় লাইন থেকে শুরু হওয়া সমস্ত লাইন মুদ্রণ করে

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