প্রান্ত থেকে গণনা পাঠ্য রেখা থেকে কোনও ক্ষেত্রটি কীভাবে কাটা (নির্বাচন) করা যায়?


32

আমি জানি কিভাবে কাটা কমান্ড ব্যবহার করে একটি লাইন থেকে ক্ষেত্র নির্বাচন করতে হয়। উদাহরণস্বরূপ, নিম্নলিখিত ডেটা দেওয়া:

a,b,c,d,e
f,g,h,i,j
k,l,m,n,o

এই আদেশ:

cut -d, -f2 # returns the second field of the input line

রিটার্নস:

b
g
l

আমার প্রশ্ন: আমি শেষ থেকে দ্বিতীয় ক্ষেত্রের গণনাটি কীভাবে নির্বাচন করতে পারি ? পূর্ববর্তী উদাহরণে, ফলাফলটি হবে:

d
i
n

উত্তর:


52

আগে ও পরে ইনপুট বিপরীত cutসঙ্গে rev:

<infile rev | cut -d, -f2 | rev

আউটপুট:

d
i
n

1
আমার বিন ফোল্ডারে আমার অনেক ছোট ছোট স্নিপেট রয়েছে। rcut হ'ল এই জন্য: #! / বিন / বাশ রেভ | "$ @" | কেটে দিন রেভ
জন অলসআপ

2
এটি খুব খারাপ cutনেতিবাচক ক্ষেত্র সূচকগুলি নিতে পারে না (পাইথনের মতো)।
কিথ দেভেনস

10

দিয়ে এটি করার চেষ্টা করুন :

awk -F, '{print $(NF-1)}' file.txt

বা ব্যবহার :

perl -F, -lane 'print $F[-2]' file.txt

বা ব্যবহার করে (ধন্যবাদ মানবিক কাজ):

ruby -F, -lane 'print $F[-2]' file.txt

বা ব্যবহার করে bash(ধন্যবাদ মানবিক কাজ):

while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt

বা ব্যবহার :

cat file.txt |
python -c $'import sys\nfor line in sys.stdin:\tprint(line.split(",")[-2])'

1
bashনা প্রয়োজন এই জন্য সংশোধন করা হয়েছে কলাম সংখ্যা: while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
manatwork

1
বিটিডাব্লু, আপনার তৃতীয় সমাধানটি যদি আপনি পরিবর্তন করেন তবে এটিও কাজ perlকরে ruby
manatwork

ধন্যবাদ, rubyসংযুক্ত, bashসম্পাদিত।
গিলস কুইনট

1
যদি চতুর্থ ক্ষেত্রটি শুরু হতে পারে -বা (পরিবেশ, শেল, বা শেল কীভাবে সংকলিত হয়েছিল তার উপর নির্ভর করে), ব্যাকস্ল্যাশ অক্ষর থাকতে পারে, তবে echoকোনও বিকল্প নয়। এটি খাওয়ানোর আগে আপনাকে কোনওcat কিছুর file.txtসাথে ঝাঁকুনির দরকার কেন ?!। আপনি ভিতরে এবং এর পরিবর্তে প্রয়োজন । নেতিবাচক সাবস্ক্রিপ্টগুলোর কাজ কিন্তু শুধুমাত্র সাম্প্রতিক সংস্করণে এবং । পুরানো সংস্করণগুলিতে, আপনি ব্যবহার করতে পারেনpythonread -Aread -aksh93zshzshksh93bash${d: -2:1}
স্টাফেন চ্যাজেলাস

2
@ স্টাফেনচাজেলাস, আমি মনে করি আপনি ${d[@]: -2:1}আপনার শেষ বাক্যে বোঝাচ্ছেন ।
manatwork

0

সেড ব্যবহার:

sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile

আউটপুট:

d
i
n

ব্যাখ্যা

  • ([^,]*,)* কমা অনুসারে যেকোন সংখ্যক অ-কমা চরিত্রের সাথে মেলে, অর্থ যেকোন কলাম।
  • ([^,]*) একটি কলামের সাথে মেলে।
  • (,[^,]*){1}শেষে একটি কলাম মিলে যায়, আপনি যদি কোয়ান্টিফায়ার পরিবর্তন {1}করতে {2}এটা আবার শেষ থেকে ইত্যাদি দ্বিতীয় কলামে সাথে মিলে যায়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.