এডাব্লু কে /… দ্বারা লাইন শুরু প্রতিস্থাপনের জন্য লাইন কাউন্টারকে কীভাবে বাড়ানো যায়?


9

আমি প্রথমে এসইডি ( sed "s/^/COUNTER \&/" /tmp/1.tex) সম্পর্কে চিন্তা করেছিলাম তবে এটি একটি একক লাইনের জন্য নকশাকৃত, এবং এখনই চিন্তা করে পাল্টা বৃদ্ধি করতে পারি না awkকারণ gawkসংহত পদ্ধতির সাথে আমার দুর্দান্ত অভিজ্ঞতা রয়েছে । উপাত্ত

What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline

প্রত্যাশিত আউটপুট

1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

ওএস: দেবিয়ান 8.5

উত্তর:


11

nl ফাইলের রেখাগুলি সংখ্যা নির্ধারণের জন্য একটি ইউটিলিটি s ব্যবহার:

nl /path/to/file

আপনার নির্দিষ্ট ক্ষেত্রে:

$ nl  -s ' & ' input.txt                                                                                                 
     1 & What & South Dragon & North Dragon    & 5 \\ \hline
     2 & What & South Dragon & North Dragon    & 5 \\ \hline
     3 & What & South Dragon & North Dragon    & 5 \\ \hline

আপনি কীভাবে প্রিপেনডিং কাউন্টার এবং এম্পারস্যান্ডের সাথে এটি একত্রিত করতে পারেন? - - এটি কাউন্টারটির জন্য কাজ করে তবে পরবর্তীকালের জন্যও নিশ্চিত না।
লিও লোপোল্ড হার্টজ 준영

3
nl -s ' &' /path/to/file-sইনপুট ফাইলের শরীর থেকে সংখ্যাগুলি কী আলাদা করে তা নির্দিষ্ট করে।
ডোপঘোটি

1
nlএর থেকে পৃথক cat -nএবং awkসমাধানটিতে এটি ডিফল্টরূপে খালি রেখাগুলির সংখ্যা নয়
ইরুবার

10

এটি আপনার পরে যা অর্জন করে। (যেমনটি হয় awk '$0=NR" & "$0' filenameতবে এটি কিছুটা রহস্যজনক)

awk '{print NR,"&",$0}' filename
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

বা sedপছন্দসই হলে এটি একই ফলাফল দেয়।

sed = filename | sed 'N;s/\n/ \& /'

perl পন্থা।

perl -pe '$_="$. & $_"' filename
perl -pe 's/^/$. & /' filename

আপনি এই সিনট্যাক্সটি কীভাবে খুঁজে পেলেন sed = filename | ...? - - আমি জানতাম না যে আপনি equalপ্রতীক সহ সেড ব্যবহার করতে পারেন । - - আপনার sedবিবৃতি গতিশীল পরিবেশে কাজ করতে পারে? কোন দুর্বলতা?
লিও লোপোল্ড হার্টজ 준영

1
@ LéoLéopoldHertz 준영 আমি ম্যান পেজের নীচে দেখেছি, =অপারেটরটি "জিরো- বা ওয়ান- ঠিকানা কমান্ডগুলি" বিভাগের অধীনে রয়েছে।
সের্গেই কোলোডিয়াজনি

হ্যাঁ = Print the current line number,। সুতরাং বৈশিষ্ট্যটি আসলে অন্তর্নির্মিত সেড। নিস!
লিও লোপল্ড হার্টজ 준영

3

পাইথন এটির জন্য একটি ভাল বিকল্প সরঞ্জাম হতে পারে:

$ python -c "import sys;lines=[str(i)+' & '+l for i,l in enumerate(sys.stdin,1)]; print ''.join(lines)" < input.txt      
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

যেভাবে এটি কাজ করে তা হ'ল আমরা পাঠ্যটিকে অজগরটির স্টিডিনে পুনর্নির্দেশ করি এবং সেখান থেকে লাইনগুলি পড়ি। enumerate()ফাংশন হ'ল লাইন গণনা দেয় sys.stdinযা ইনপুট হিসাবে নির্দিষ্ট করা হয় এবং 1এটি সূচনা সূচক। বাকিটি সহজ - আমরা স্ট্রিংয়ের সাথে এক সাথে যুক্ত হয়ে ' & 'স্ট্রিং এবং লাইনটি নিজেই সূচি কাস্ট করে নতুন স্ট্রিংয়ের তালিকা তৈরি করি । পরিশেষে, ''.join()ফাংশন দ্বারা একটি পরীক্ষায় তালিকা থেকে পুনরায় সংযুক্ত সমস্ত কিছু ।

বিকল্পভাবে, এখানে একটি স্ক্রিপ্ট ফাইলের জন্য বা কেবল পঠনযোগ্যতার জন্য একটি বহু-লাইন সংস্করণ:

#!/usr/bin/env python
import sys

for index,line in enumerate(sys.stdin,1):
    print str(index) + ' & ' + line.strip()

ঠিক একই কাজ করে:

$ ./line_counter.py  < input.txt                                                                                         
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

তবে আপনি যদি এটি ব্যাশে করা পছন্দ করেন, তবে এটিও করা যেতে পারে:

$ counter=1; while read line ; do printf "%s & %s\n" "$counter" "$line" ; counter=$(($counter+1)) ; done < input.txt
1 & What & South Dragon & North Dragon    & 5 \ hline
2 & What & South Dragon & North Dragon    & 5 \ hline
3 & What & South Dragon & North Dragon    & 5 \ hline

1
@ ল্যাওলাপ্পল্ড হার্টজ 준영 ভাল, আমি যদি গণনা ছাড়াই এটি করতে পারি তবে আমার একটি পরিবর্তনশীল দরকার যা সংখ্যার লাইনের সন্ধান করে এবং আমাকে প্রতিবার সেই পরিবর্তনশীল এবং বর্ধিতকরণের সূচনা করতে হবে। enumerate()কোডের 3 লাইনের মতো সঞ্চয় করে ব্যবহার করা। তালিকার আইটেমগুলিতে প্রক্রিয়াজাতকরণের মতো অন্যান্য জিনিসগুলির সাথে কাজ করার সময় এটি দরকারী। দেখুন docs.python.org/2/library/functions.html#enumerate
Sergiy Kolodyazhnyy

@ ল্যাওলোপল্ড হার্টজ 준영 যদি আপনি bashযেমন উদাহরণস্বরূপ কাউন্টার ব্যবহার করতে বুঝতে পারেন তবে তা নির্দ্বিধায় অনুভব করুন :) আমি অভিজ্ঞতা enumerate()থেকে আরও মার্জিত হতে পেরেছি, তবে এটি আমার মতামত। যাইহোক, যদি আপনি আরও বেশি পরিষ্কার বলে মনে করেন তবে অন্য পদ্ধতিটি ব্যবহার করুন
সের্গেই কলডিয়াজহনি

ঠিক আছে, enumerateপরিবর্তনশীল ইনস্ট্যান্টেশন চেয়ে পরিষ্কার। লাম্বদা এক্সপ্রেশন কিছু জায়গা বাঁচাতে পারে?
লিও লোপোল্ড হার্টজ 준영

@ LéoLéopoldHertz 준영 এটি একটি দীর্ঘ স্ক্রিপ্টে স্থান বাঁচাতে পারে, তবে এই ক্ষেত্রে, আমি কীভাবে এটি সাহায্য করতে পারে তা দেখছি না।
সের্গেই কোলোডিয়াজনি

2

এটি cat -nস্বয়ংক্রিয় নম্বর দেওয়ার সাথে ব্যবহার করে একটি বিকল্প :

while read num line;do echo $num "&" $line;done <<<$(cat -n a.txt)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.