আমি ডিবিজিভিউ লগ ফাইল থেকে প্রথম দুটি কলাম (যার মধ্যে আমি আগ্রহী না) সরিয়ে দেওয়ার চেষ্টা করছি। লাইন শেষ হওয়ার পরে আমি 3 টি কলাম থেকে প্রিন্ট করে এমন কোনও উদাহরণ খুঁজে পাচ্ছি না। নোট করুন যে প্রতিটি লাইনে চলক সংখ্যক কলাম রয়েছে।
আমি ডিবিজিভিউ লগ ফাইল থেকে প্রথম দুটি কলাম (যার মধ্যে আমি আগ্রহী না) সরিয়ে দেওয়ার চেষ্টা করছি। লাইন শেষ হওয়ার পরে আমি 3 টি কলাম থেকে প্রিন্ট করে এমন কোনও উদাহরণ খুঁজে পাচ্ছি না। নোট করুন যে প্রতিটি লাইনে চলক সংখ্যক কলাম রয়েছে।
উত্তর:
... বা একটি সহজ সমাধান: cut -f 3- INPUTFILE
কেবল সঠিক ডিলিমিটার যুক্ত করুন (-ড) এবং আপনি একই প্রভাব পেয়েছেন।
awk '{for(i=3;i<=NF;++i)print $i}'
awk '{for(i=3;i<=NF;++i)printf $i""FS ; print ""}'
( printf
যখন সম্পর্কে newline গৃহস্থালির কাজ প্রিন্ট করা হবে না print ""
অন্যান্য ক্ষেত্রের পর সম্পর্কে newline যোগ হবে মুদ্রিত হয়েছে)
echo $(seq 1 10) | awk '{for (i=3; i<=NF; i++) printf $i FS}'
, দেয় যা: 3 4 5 6 7 8 9 10
।
awk '{ print substr($0, index($0,$3)) }'
সমাধানটি এখানে পাওয়া গেছে:
http://www.linuxquestions.org/questions/linux-newbie-8/awk-print-field-to-end-and-character-count179078/
জোনাথন ফেনবার্গের উত্তর প্রতিটি ক্ষেত্রকে আলাদা লাইনে মুদ্রণ করে। আপনি printf
একই লাইনে আউটপুট রেকর্ডটি পুনর্নির্মাণ করতে ব্যবহার করতে পারেন , তবে আপনি কেবল ক্ষেত্রগুলি বাম দিকে সরাতে পারেন।
awk '{for (i=1; i<=NF-2; i++) $i = $(i+2); NF-=2; print}' logfile
NF
দ্বারা হ্রাসের অনুমতি নেই।
NF
হ্রাস করা যায় কিনা সে বিষয়ে নীরব রয়েছে বলে মনে হয় ।
awk '{$1=$2=$3=""}1' file
এনবি: এই পদ্ধতিটি 1,2,3 ক্ষেত্রে "ফাঁকা" ছেড়ে দেবে তবে আপনি আউটপুটটি দেখতে চাইলে কোনও সমস্যা হবে না।
1
মানে কি? আমি কোন কীওয়ার্ড দিয়ে সন্ধান করব awk
?
{$1=$2=$3="";$0=$0;$1=$1}1
আপনি যদি একই লাইনে উদাহরণস্বরূপ তৃতীয়টির পরে কলামগুলি মুদ্রণ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
awk '{for(i=3; i<=NF; ++i) printf "%s ", $i; print ""}'
উদাহরণ স্বরূপ:
Mar 09:39 20180301_123131.jpg
Mar 13:28 20180301_124304.jpg
Mar 13:35 20180301_124358.jpg
Feb 09:45 Cisco_WebEx_Add-On.dmg
Feb 12:49 Docker.dmg
Feb 09:04 Grammarly.dmg
Feb 09:20 Payslip 10459 %2828-02-2018%29.pdf
এটি মুদ্রণ করবে:
20180301_123131.jpg
20180301_124304.jpg
20180301_124358.jpg
Cisco_WebEx_Add-On.dmg
Docker.dmg
Grammarly.dmg
Payslip 10459 %2828-02-2018%29.pdf
আমরা দেখতে পাচ্ছি, পেসলিপ এমনকি জায়গার সাথেও, সঠিক লাইনে দেখায়।
নিম্নলিখিত লাইন সম্পর্কে কি:
awk '{$ 1 = $ 2 = $ 3 = ""; মুদ্রণ ফাইল
@ ঘোস্টডোগ sugges৪ পরামর্শের ভিত্তিতে। আপনি লাইনগুলি ফিল্টার করার সময় আমার আরও ভাল আচরণ করা উচিত, যেমন:
awk '/ ^ exim4-config / {$ 1 = ""; মুদ্রণ ফাইল
sed 's/\s\+//g'
নেতৃস্থানীয় স্থানগুলি ছাঁটাই করতে কমান্ডের শেষে পাইপ ও যুক্ত করতেও পারে
awk -v m="\x0a" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
প্রদত্ত ক্ষেত্রটি এনআর।, এন এর আগে যা রয়েছে তা এই চপগুলি ফিল্ড এনআরএনএন সহ বাকী সমস্ত রেখাকে মুদ্রণ করে এবং মূল ফাঁক রক্ষণাবেক্ষণ করে (এটি পুনরায় ফর্ম্যাট করে না)। যদি ক্ষেত্রের স্ট্রিংটি লাইনের অন্য কোথাও উপস্থিত হয় তবে এটি কোনও বিষয় নয়, যা দাইসায়ার উত্তর নিয়ে সমস্যা।
একটি ফাংশন সংজ্ঞায়িত করুন:
fromField () {
awk -v m="\x0a" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}
এবং এটি এর মতো ব্যবহার করুন:
$ echo " bat bi iru lau bost " | fromField 3
iru lau bost
$ echo " bat bi iru lau bost " | fromField 2
bi iru lau bost
আউটপুট পিছনে স্থান সহ সমস্ত কিছু বজায় রাখে
ফাইলগুলির জন্য ভাল কাজ করে যেখানে '/ n' রেকর্ড বিভাজক হয় যাতে আপনার লাইনের ভিতরে নতুন লাইনের চর নেই। আপনি যদি এটি অন্যান্য রেকর্ড বিভাজকের সাথে ব্যবহার করতে চান তবে ব্যবহার করুন:
awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
উদাহরণ স্বরূপ. যতক্ষণ না তারা হেক্সাডেসিমাল চর এনআর ব্যবহার না করে প্রায় সব ফাইলের সাথে ভাল কাজ করে। 1 লাইনের ভিতরে।
নিম্নলিখিত লভ্য কমান্ডটি প্রতিটি লাইনের শেষ এন ক্ষেত্রগুলি প্রিন্ট করে এবং লাইনের শেষে একটি নতুন লাইন অক্ষর প্রিন্ট করে:
awk '{for( i=6; i<=NF; i++ ){printf( "%s ", $i )}; printf( "\n"); }'
নীচে একটি উদাহরণ সন্ধান করুন যা / ইউএসআর / বিন ডিরেক্টরিটির বিষয়বস্তু তালিকাভুক্ত করে এবং তারপরে সর্বশেষ 3 লাইন ধরে এবং তারপরে প্রতিটি লাইনের শেষ 4 টি কলাম ছদ্মবেশ ব্যবহার করে মুদ্রণ করে:
$ ls -ltr /usr/bin/ | tail -3
-rwxr-xr-x 1 root root 14736 Jan 14 2014 bcomps
-rwxr-xr-x 1 root root 10480 Jan 14 2014 acyclic
-rwxr-xr-x 1 root root 35868448 May 22 2014 skype
$ ls -ltr /usr/bin/ | tail -3 | awk '{for( i=6; i<=NF; i++ ){printf( "%s ", $i )}; printf( "\n"); }'
Jan 14 2014 bcomps
Jan 14 2014 acyclic
May 22 2014 skype
ঠিক আছে, আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করে সহজেই একই প্রভাব অর্জন করতে পারেন। বিভাজকটি একটি স্থান হিসাবে ধরে নেওয়া, এটি দেখতে এই রকম হবে:
awk '{ sub(/[^ ]+ +[^ ]+ +/, ""); print }'
awk '{ sub(/([^ ]+ +){2}/, ""); print }'
যা প্যাটার্নটি দু'বার দূরে নেয়।
পার্ল সমাধান:
perl -lane 'splice @F,0,2; print join " ",@F' file
এই কমান্ড-লাইন বিকল্পগুলি ব্যবহার করা হয়:
-n
ইনপুট ফাইলের প্রতিটি লাইন প্রায় লুপ, প্রতিটি লাইন স্বয়ংক্রিয়ভাবে মুদ্রণ করবেন না
-l
প্রসেসিংয়ের আগে নতুন লাইনগুলি সরিয়ে দেয় এবং পরে এগুলিকে আবার যুক্ত করে
-a
অটোস্প্লিট মোড - @F অ্যারেতে বিভক্ত ইনপুট লাইনগুলি। সাদা স্থানটিতে বিভাজনে ডিফল্ট
-e
পার্ল কোডটি কার্যকর করুন
splice @F,0,2
@F অ্যারে থেকে 0 এবং 1 কলাম পরিষ্কারভাবে সরিয়ে দেয়
join " ",@F
প্রতিটি উপাদানগুলির মধ্যে একটি স্পেস ব্যবহার করে @F অ্যারের উপাদানগুলিতে যোগদান করে
যদি আপনার ইনপুট ফাইলটি স্থান-সীমান্তের পরিবর্তে কমা-বিস্মৃত হয়, তবে ব্যবহার করুন -F, -lane
পাইথন দ্রবণ:
python -c "import sys;[sys.stdout.write(' '.join(line.split()[2:]) + '\n') for line in sys.stdin]" < file
বাশ-এ আপনি অবস্থানগত পরামিতিগুলির সাথে নিম্নোক্ত বাক্য গঠন ব্যবহার করতে পারেন:
while read -a cols; do echo ${cols[@]:2}; done < file.txt
আরও জানুন: বাশ হ্যাকার্স উইকিতে অবস্থানিক পরামিতিগুলি পরিচালনা করা
এডাব্লুকে কলামগুলিকে ক্ষেত্র বলা হয়, সুতরাং এনএফই কী
সমস্ত সারি:
awk -F '<column separator>' '{print $(NF-2)}' <filename>
প্রথম সারিটি:
awk -F '<column separator>' 'NR<=1{print $(NF-2)}' <filename>