awk डिस्प्ले में खाली लाइनों को हटा दें


10

मैं इस सवाल का हल निकालने की कोशिश कर रहा था । मैं awkसमाधान के लिए उपयोग करना चाहता था ।

मेरी इनपुट फ़ाइल कुछ इस तरह है।

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4

मैंने नीचे के awkबाद दूसरे मान निकालने के लिए कमांड का उपयोग किया _

awk -F "_" '{print $2}' file

हालाँकि, यद्यपि उपरोक्त कमांड सही मानों को प्रिंट करता है, मुझे अपने आउटपुट में रिक्त लाइनें मिल रही हैं। मेरे 2 सवाल हैं।

प्रश्न 1

मैं कैसे उत्पादन में रिक्त लाइनों तो निकाल सकते हैं कि मैं केवल मिल venkatऔर venkat3उत्पादन में?

यदि मैं अपने printfबजाय का उपयोग करता printहूं awk, तो मुझे venkatvenkat3आउटपुट के रूप में मिलता है जो मैं हासिल नहीं करना चाहता था। मुझे आउटपुट चाहिए,

venkat
venkat3

प्रश्न 2

एक सहयोगी सरणी या कुछ के रूप में उन मूल्यों का उपयोग करते हुए , मैं कैसे पता लगा सकता हूं कि क्या मूल्य वास्तव में $1कॉलम में होते हैं ?

मैं कुछ हासिल करना चाहता था,

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

संपादित करें

मैंने awkस्टीफन के समाधान पर ध्यान नहीं दिया । क्या यह वही काम कर रहा है जिसका मैंने उल्लेख किया था?


1
स्टीफन awkयही काम नहीं कर रहे हैं। आपका दृष्टिकोण मानता है कि एक शब्द केवल दूसरे में समाहित हो सकता है अगर वह अलग हो जाए _। जबकि यह ओपी के उदाहरण के लिए सच है, पोस्ट किए गए सभी उत्तर भी doglionकेवल और केवल मामलों की तरह ही निपटते हैं dog_lion
terdon

जवाबों:


8

प्रश्न 1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3

प्रश्न 2

$ awk -F _ '
    NR == FNR {a[$1];next}
    ($2 in a) {print $2}
' file file
venkat
venkat3

मुझे प्रदर्शित करने की आवश्यकता है venkatऔर venkat3ओपी के अनुसार अन्य प्रश्न में पूछा गया है। मैं यह जानने की कोशिश कर रहा हूं कि _मेरे $1कॉलम में मौजूद कुंजी के बाद क्या है ।
रमेश

ओह, मैंने अपना जवाब अपडेट कर दिया है!
cuonglm

अच्छा समाधान है। मुझे लगता है कि आपको दूसरे प्रश्न में इसे भी अपने समाधान में जोड़ना चाहिए :)
रमेश

8

प्रश्न 1 के लिए, आप --only-delimited( -s) विकल्प का उपयोग कर सकते हैंcut

cut -s -f2 -d'_' file
venkat
venkat3

8

एक और तरीका:

प्रश्न 1

awk -F_ '$2{print $2}' file

यह केवल तभी प्रिंट होगा जब $2परिभाषित किया गया है। यह लिखने का एक छोटा तरीका है:

awk -F_ '{if($2){print $2}}' file

प्रश्न 2

जोड़ने के लिए कुछ भी नहीं है जो पहले से ही संबोधित नहीं किया गया है।


1
प्रश्न 1 के लिए अच्छा समाधान। लघु और कुरकुरा :)
रमेश

6

प्रश्न 1

awk -F "_" '/_/ {print $2}' file

प्रश्न 2

awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file

अच्छा समाधान है। मुझे यह पसंद है :)
रमेश

प्रश्न 2 के लिए, मैं केवल venkatऔर venkat3आउटपुट प्राप्त करने का इरादा रखता हूं क्योंकि वे मौजूद हैं $1। हालाँकि, मुझे $1आपकी आज्ञा के अनुसार सभी मूल्य मिलते हैं ।
रमेश

@ रमेश: आपके विवरण के अनुसार, मुझे लगता है कि आप $2उस प्रविष्टि को प्राप्त करना चाहते हैं $2जो 1 कॉलम में होती है। क्या यह सही है?
cuonglm

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