অজানা সম্পর্কে একটি প্রশ্ন


9

ঠিক আছে, যেহেতু এটি একটি জটিল প্রশ্ন, আমি এটি পরিষ্কারভাবে ব্যাখ্যা করব। আমি নীচে হিসাবে দেখানো একটি ফাইল সামগ্রী পেয়েছি:

$ Cat File1 
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {TBMKF}
ABC Cool Lol POP {YUKER}
ABC Cool Lol POP {EFEFVD}

আমি যে আউটপুট চাই

-Cool MNB +  POP ;
-Cool MNB  + POP ;
-Cool MNB  + POP ;
-Cool TBMKF + POP ;
-Cool YUKER + POP ;
-Cool EFEFVD +POP ;

প্রথমত আমি শেষ কলামটি File1বের করে এটিকে মুদ্রণ করার চেষ্টা করি sed 's/[{}//g' File1 > File3

এর পরে আমি সম্পূর্ণ সামগ্রীতে File1একটি নতুন অনুলিপিFile4

cp File1 File4

এরপর আমি ডেটা ভিতরে প্রতিস্থাপন File4সঙ্গে File3তথ্য (মানে ডাটা বন্ধনী এক ছাড়া " File1শেষ কলামটি যে এক")

awk 'FNR==NR{a[NR]=$1;next}{$5=a[FNR]}1' File3 File4 >>File5 

আউটপুট এর মতো হওয়া উচিত

ABC Cool Lol POP MNB
ABC Cool Lol POP MNB
ABC Cool Lol POP MNB
ABC Cool Lol POP TBMKF
ABC Cool Lol POP YUKER
ABC Cool Lol POP EFEFVD

অবশেষে, আমি চেষ্টা

awk -F " '{print - $2,$5 +,$4 ";"}‘ File5

তবে ফলাফলটি যেমনটি আমি চাই তেমন প্রকাশিত হয়নি, কেবল একই জাতীয় ডেটা এমএনবি সমস্ত নীচে তালিকাভুক্ত করা হয়, অন্যরা দেখায় নি (ফাইলটি একটি শেষ কলামের ডেটা ফাইল করে),


আপনি gnu awk ব্যবহার করছেন?
123

আমি কী বলতে চাইছি তা নিশ্চিত নই। তবে আমি মাত্র ছড়িয়ে ছিটিয়ে ছাপার জন্য নতুন একজন প্রহরী
heng960407

1
টাইপ awk --version, ফলাফল কি?
123

2
আপনার শিরোনামটি আপনার সমস্যার সাথে আরও নির্দিষ্ট কিছুতে পরিবর্তন করুন। ভবিষ্যতে অনুরূপ প্রশ্ন থাকা অন্যদের পক্ষে এটি সন্ধান করা আরও সহজ করে তুলবে। এই মুহুর্তে "অ্যাডাবাইট সম্পর্কে একটি প্রশ্ন" খুব সাধারণ।
টম ফেনেক

উত্তর:


16

আপনি কেন বাম এবং ডান জিনিসগুলি অনুলিপি করছেন তা আমি জানি না। সহজ জিনিসটি হ'ল

awk '{print "-" $2, substr($5,2,length($5)-2), "+", $4, ";"}' File1

আমি -শুরুতে এবং ;তারপরে প্রান্তটি রেখেছি ।

এর মধ্যে আমরা মুদ্রণ করি

  • $2 কারণ আমরা এটি যেমন চাই
  • একটি সাবস্ট্রিং $5, যা প্রথম এবং শেষ অক্ষর ব্যতীত স্ট্রিং। আমরা পজিশন 2 এ শুরু করে প্রথম অক্ষরটি এড়িয়ে চলেছি (অ্যাডাক সবসময়ই এটি সম্পর্কে আশ্চর্যজনক ছিল) এবং কেবলমাত্র দুটি অক্ষর সংক্ষিপ্ততর একটি স্ট্রিং নির্বাচন করে শেষ অক্ষরটি বাদ দিন, মূল থেকে$5
  • +কারণ আমরা তা চাই
  • এবং তারপর $4

তবে, আমি নিশ্চিত নই যে এই সমস্ত স্ট্রিং ফাংশন জিএনইউ অ্যাজকের সাথে নির্দিষ্ট are


substr(string, 2)সাবস্ট্রিং দ্বিতীয় চরিত্র, মত থেকে শুরু ফেরৎ cut -c2-, tail -n +2, sed '2,$'... কি এত অদ্ভুত অদ্ভুত যে সম্পর্কে কি?
স্টাফেন চেজেলাস

3
এই কমান্ডটি মানসম্মত এবং এমনকি awk70 এর দশকের মূলটির সাথেও কাজ করবে ।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস: আহ, আমি আপনার জন্য অপেক্ষা করছিলাম :-) সাধারণত আমরা 0 গণনা শুরু করি যার অর্থ সূচক 2 তৃতীয় অবস্থান, তবে এখানে দ্বিতীয় অবস্থানটি সূচক 2 এ রয়েছে বাকী জিএনইউ প্রশ্নটি স্পষ্ট করার জন্য ধন্যবাদ Thanks
বনাঙ্গুইন

ইউনিক্স শেল এবং ইউটিলিটিগুলিতে @ বনগুইন, উপরোক্ত কয়েকটি উদাহরণ হিসাবে দেখানো হয়েছে, আমরা 1 থেকে শুরু করব না, 0 নয়। সর্বাধিক উল্লেখযোগ্য ব্যতিক্রমগুলি হ'ল কেএসএসের অ্যারে এবং $ {ভার: অফসেট} (উভয়ই বাশ দ্বারা অনুলিপি করা হয়েছে)। অন্যান্য সকল শেল অ্যারে 1. দেখুন এ শুরু এছাড়াও একটি কারণ কেন একটি Zsh অ্যারের প্রথম উপাদান 1 পরিবর্তে 0 দ্বারা সূচীবদ্ধ করা হয় কি?
স্টাফেন চেজেলাস

7

সেড সঙ্গে

sed '
    s/\S\+\s/-/
    s/\(\S\+\s\)\{2\}{\(\S\+\)}/\2 + \1;/
    ' File1

এবং ভৌত প্রকরণ

awk -F"[[:blank:]{}]+" '{print "-" $2, $5, "+", $4}' ORS=" ;\n" File1

6

সহজ টিএক্সআর কাজ:

$ txr -c '@(repeat)
@a @b @c @d {@e}
@(do (put-line `-@b @e + @d ;`))
@(end)' -
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {MNB}
ABC Cool Lol POP {TBMKF}
ABC Cool Lol POP {YUKER}
ABC Cool Lol POP {EFEFVD}
[Ctrl-D][Enter]
-Cool MNB + POP ;
-Cool MNB + POP ;
-Cool MNB + POP ;
-Cool TBMKF + POP ;
-Cool YUKER + POP ;
-Cool EFEFVD + POP ;

TXR লিস্প awk ম্যাক্রো ব্যবহার করে আউক সমাধানটি অনুলিপি করতে:

 txr -e '(awk (t (prn `-@[f 1] @{[f 4] [1..-1]} + @[f 3] ;`)))'

ক্ষেত্রগুলি fতালিকায় রয়েছে এবং সূচকগুলি শূন্য ভিত্তিক।


1
লিসপ এবং ক্রিস্টিয়েস্ট চেহারাটির জন্য +1! এই ভাষাটি পিসিগিতে (প্রোগ্রামিং কোড গল্ফ) প্রতিযোগিতা করা উচিত
আর্চেমার

@ আর্চামার টিএক্সআর খুব ভালভাবে গল্ফিংয়ে প্রতিযোগিতা করে না কারণ পৃথক চরিত্রগুলিকে ফাংশন নির্ধারণের মতো কাজ করে এমন বিশেষ ভাষাগুলি রয়েছে যা রচনা অর্জনের জন্য একসাথে জড়িত হতে পারে।
কাজ

: @Archemar একটি এন্ট্রি রাখুন codegolf.stackexchange.com/questions/68712/output-the-next-kana
Kaz

1
@ কাজ কোন টিএক্সআর টিউটোরিয়াল কোথাও আছে? ম্যান পেজটি বরং বিশাল মনে হচ্ছে। কীভাবে এটি অর্কের সাথে তুলনা করে?
bli

1
@ বিলি জিএনইউ আউক টিএক্সআর আরএকে ম্যাক্রোর চেয়ে বড় ফাইলের মধ্যে বিভক্ত হয়ে কমপক্ষে ৩০ গুণ দ্রুতগতির মতো, যা রেকর্ড এবং ক্ষেত্রগুলিতে ইনপুট উত্সগুলি প্রসেস করার সামগ্রিক লুপ সহ ব্যাখ্যা করা কোডের প্রায় 220+ লাইন ।
কাজ

3

যখন $1,$2,...ক্ষেত্রগুলি ইতিমধ্যে আপনার সাথে কাজ করতে চান তার জন্য সঠিক স্ট্রিংগুলি উপস্থিত থাকে তখন awk ব্যবহার করা সহজ । ক্ষেত্র বিভাজক, যদি এতে একাধিক অক্ষর থাকে তবে এটি নিয়মিত প্রকাশ হিসাবে ব্যাখ্যা করা হয়। {কোঁকড়া ধনুর্বন্ধনী of থেকে মুক্তি পেতে আমাদের কোনও অনুসন্ধান এবং প্রতিস্থাপন বা সাবস্ট্রিং অপারেশন করার দরকার নেই} আমরা কেবল তাদের ডিলিমিটারের অংশ হিসাবে গণনা করি।

awk -F'[ {}]+' '{printf("-%s %s + %s ;\n", $2, $5, $4)}'

এর printfপরিবর্তে ব্যবহার করা printস্ট্রিংটি কীভাবে বিন্যাস করা হবে তাও কিছুটা সহজ করে তোলে তবে আপনি যদি এর print "-"$2,$5" + "$4";"পরিবর্তে থাকতে চান তবে printf("-%s %s + %s ;\n", $2, $5, $4)এটি একটি বিকল্প।

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