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


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.