दोहरे उद्धरण चिह्नों के बीच मान निकालें


16

मेरी क्वेरी दोहरे उद्धरण चिह्नों के बीच मान निकालने के लिए है ""। नमूना इनपुट है:

10.219.41.68 - - - [11 / जून / 2014: 10: 23: 04 -0400] Sec: 0 Micecec: 1797 "GET / बैलेंसर-मैनेजर HTTP / 1.1" 200 28980 "-" "कर्ल / 7.15.5 (i386) -रेडैट-लाइनक्स-ग्नू) लिबासर्ल / 7.15.5 ओपनएसएसएल / 0.9.8 बी ज़्लिब / 1.2.3 लिबिडन / 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

तो फिर यह प्रिंट नहीं होगा? यह वही है जो आपके उत्तर में अभ्यस्त है। केवल अंतर यह है कि आपका उत्तर $ 2 के साथ हर रिकॉर्ड के लिए एक रिक्त रेखा को प्रिंट करेगा।

नहीं, मेरा उत्तर एक रिक्त प्रिंट की तरह है। और कल्पना कीजिए कि मूल्य 0केवल शून्य नहीं है?
congonglm

मुझे लगता है कि सवाल का संदर्भ दिया जाएगा जो एक समस्या नहीं होगी।

आपकी त्वरित प्रतिक्रियाओं के लिए धन्यवाद ... यह वास्तव में मेरे लिए मददगार है। आपका बहुत बहुत धन्यवाद!
user79658

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

अपने उत्तर में थोड़ा और
क्रिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.