2011-11-28 12 views
20

तो मैं awk का उपयोग कर कम आउटपुट का पहला कॉलम प्राप्त करने का प्रयास कर रहा हूं। मैंने पढ़ा तो मैंने किया था कि टैब कॉम के लिए एक विभाजक के रूप में इस्तेमाल किया गया था:कम आउटपुट के पहले कॉलम को कैसे प्राप्त करें?

awk -F"\t" '{print $1}' comm-result.txt 
कॉम-result.txt के उत्पादन से युक्त के साथ

:

comm -3 file1 file2 

लेकिन यह काम करने के लिए प्रतीत नहीं होता।

यह सराहना अंतरिक्ष चरित्र को विभाजक के रूप में भी लेती है और मुझे अजीब परिणाम मिलते हैं जब मेरी फ़ाइलों में एकाधिक रिक्त स्थान होते हैं।

मैं केवल comm से पहला कॉलम कैसे प्राप्त कर सकता हूं?

उत्तर

26

"comm file1 file2" उत्पादन का पहला स्तंभ file1 के लिए अद्वितीय रेखाएं हों, "इसलिए मैंने कॉम उत्पादन का पहला स्तंभ पाने के लिए कोशिश कर रहा हूँ"। आप comm को -2 (file2 पर अनन्य लाइनों को दबाएं) और -3 (दोनों फ़ाइलों में दिखाई देने वाली लाइनों को दबाएं) के साथ पोस्ट-प्रोसेसिंग को छोड़कर पोस्ट-प्रोसेसिंग को छोड़ सकते हैं।

cut -f1 comm-results.txt 

हालांकि, खाली में इस परिणाम:

comm -2 -3 file1 file2 # will show only lines unique to file1 

हालांकि, अगर आप लेकिन Carl mentioned रूप comm का एक पूर्व चलाने उत्पादन प्रक्रिया करने के लिए तो कोई विकल्प नहीं है, cut एक विकल्प होगा उन मामलों के लिए लाइनें जहां कॉलम 1 खाली है। इस समस्या से निपटने के लिए, शायद awk अधिक उपयुक्त हो सकता है:

awk -F"\t" '{if ($1) print $1}' comm-results.txt 
    ---- ---------------- 
     |      | 
    Use tab as delimiter  | 
          +-- only print if not empty 
+0

बहुत बहुत धन्यवाद, मुझे -1 और -2 विकल्पों के बारे में पता नहीं था, मैंने सोचा कि मुझे परिणाम को संसाधित करना था। – Daddou

+1

आपका स्वागत है। जब तक मैंने मैन पेज को देखा, तब तक मुझे इसके बारे में पता नहीं था। –

7

cut(1) शायद इस समस्या के लिए awk से बेहतर विकल्प है।

+0

क्या आप एक उदाहरण प्रदान कर सकते हैं? –

+0

@ जेसन थॉम्पसन, स्वीकार्य उत्तर में पहले से ही एक उदाहरण है। अगर आप कुछ और ढूंढ रहे हैं, तो आपको एक नया सवाल पूछना चाहिए? –

+0

आह ... मैं इसे अब देखता हूं। मैंने इसे याद किया क्योंकि मैं जवाब के माध्यम से स्कैन कर रहा था। –

3

आप -2 और -3 साथ comm उपयोग कर सकते हैं (already explained above के रूप में), या के साथ grep तरह comm का उपयोग करें:

grep -o '^\S\+' <(comm file1 file2) 

तो उत्पादन जीता किसी भी पिछली जगह नहीं है। यह गैर-comm कमांड के लिए उपयोगी है।

+1

बस थोड़ा सा ट्विक के साथ पीएस आउटपुट पर सुपर अच्छा काम करता है! 'पीएस-ए | grep नोड | grep -o '^ \ s * \ S \ +' ' –

संबंधित मुद्दे