ডাবল উদ্ধৃতিগুলির মধ্যে মান বের করুন


16

আমার জিজ্ঞাসা হ'ল ডাবল উদ্ধৃতিগুলির মধ্যে মানটি বের করা ""। নমুনা ইনপুটটি হ'ল:

10.219.41.68 - - - [11 / জুন / 2014: 10: 23: 04 -0400] সেকেন্ড: 0 মাইসেক: 1797 "জিইটি / ব্যালান্সার-ম্যানেজার এইচটিটিপি / 1.1" 200 28980 "-" "কার্ল / 7.15.5 (আই 386) -redhat-linux-gnu) libcurl / 7.15.5 OpenSSL / 0.9.8b zlib / 1.2.3 libidn / 0.6.5 "

আমার কাছে বড় লগ ফাইল রয়েছে, সুতরাং প্রতিটি লাইনের জন্য মানগুলি পৃথক হতে পারে, ডাবল উদ্ধৃতিগুলির প্রথম সংঘর্ষের মধ্যে মানটি বের করতে হবে ...

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

GET /balancer-manager HTTP/1.1

কারও কোনও ধারণা আছে তবে দয়া করে পরামর্শ দিন।


উত্তর:


27

আপনি কেবল এটির cutজন্য ব্যবহার করতে পারেন :

$cut -d '"' -f2 < logfile
GET /balancer-manager HTTP/1.1

-d '"'cutতার ক্ষেত্রের ডিলিমিটার হিসাবে একটি ডাবল উদ্ধৃতি ব্যবহার করতে বলে । -f2দ্বিতীয় ক্ষেত্রটি নিতে বলছে, যা প্রথম এবং দ্বিতীয় উদ্ধৃতিগুলির মধ্যে - বা প্রথম উদ্ধৃত স্ট্রিং, ঠিক আপনি কী চান।


কীভাবে সহজেই সমস্ত সংখ্যক কলামগুলি কীভাবে প্রিন্ট করা যায় %!cut -d '"' -f2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58?
— hhh

10

একটি উপায় ব্যবহার awk

awk -F'"' '$0=$2' file

যদি কোনও অযৌক্তিক কারণে আপনার HTTP পদ্ধতিগুলি আসলে হয় 0এবং আপনি এগুলি আউটপুট করতে চান

awk -F'"' '{$0=$2}1' file

$2নাল হলে কী হবে ?
— cuonglm

তারপরে এটি কি প্রিন্ট করবে? এটি আপনার উত্তরের মতো হবে না। কেবলমাত্র পার্থক্য হ'ল আপনার উত্তরটি প্রতিটি রেকর্ডের জন্য কোনও ফাঁকা রেখা মুদ্রণ করবে no 2 ছাড়াই।

না, আমার উত্তরটি খালি প্রিন্ট করুন। এবং কল্পনা করুন যে মানটি 0কেবল নাল নয়?
— cuonglm

আমি ভাবতাম এমন প্রশ্নটির প্রসঙ্গটি দিয়েছি যে কোনও সমস্যা হবে না।

আপনার দ্রুত প্রতিক্রিয়ার জন্য সমস্ত ধন্যবাদ ... এটি আমার জন্য সত্যই সহায়ক। অনেক ধন্যবাদ!
— ব্যবহারকারী 79658

4

যেহেতু একটি awkএবং perlসমাধান ইতিমধ্যে সরবরাহ করা হয়েছে, তাই আমি চেষ্টা করতে চাই sed:

sed 's/[^"]*"\([^"]*\)".*/\1/' file

2

আপনি এটি অনেক উপায়ে করতে পারেন।

সহ awk:

$ awk -F'"' '{print $2}' file
GET /balancer-manager HTTP/1.1

সহ perl:

$ perl -F'"' -anle 'print $F[1]' file
GET /balancer-manager HTTP/1.1

0

উদ্ধৃত ইনপুট নম্বরগুলি প্রক্রিয়াজাতকরণ

echo   1234   | awk '{                i=strtonum($1) ;  printf( "%s %d\n",$1, i)}'  # no problem
echo '"1234"' | awk '{                i=strtonum($1) ;  printf( "%s %d\n",$1, i)}'  # does not work
echo '"1234"' | awk '{ gsub("\"",""); i = $1         ;  printf( "%s %d\n",$1, i)}'  # works

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