shell - पहले कॉलम निकालें और फिर शेष रेखा को अजीब में छोड़ दें




unix awk (3)

मैं पाठ फ़ाइल में पहले तीन फ़ील्ड निकालने के लिए awk का उपयोग करने की कोशिश कर रहा हूं। पहले तीन क्षेत्रों को निकालना आसान है। लेकिन बाकी रेखा को awk द्वारा गड़बड़ कर दिया जाता है: डिलीमीटर को टैब से स्पेस में बदल दिया जाता है

यहाँ मैंने कोशिश की है:

head pivot.threeb.tsv | awk 'BEGIN {IFS="\t"} {$1=$2=$3=""; print }' 

पहले तीन स्तंभ ठीक से हटा दिए गए हैं। समस्या यह है कि आउटपुट $ 4 $ 5 $ 6 स्तंभों के बीच रिक्त स्थान में परिवर्तित किए गए स्तंभों के बीच समाप्त होता है।


असल में यह बहुत सरल कट कमांड में किया जा सकता है:

cut -f4- inFile

पहले ईडी के रूप में टिप्पणी की गई, आपको FS को फ़ील्ड विभाजक के रूप में उपयोग करने के लिए awk में रखना होगा। tab आपके आउटपुट में space बन जाता space , क्योंकि आपने OFS को परिभाषित नहीं किया है

awk 'BEGIN{FS=OFS="\t"}{$1=$2=$3="";print}' file

यह पहले 3 फ़ील्ड को निकाल देगा, और बाकी पाठ "अछूता" छोड़ देगा (आप प्रमुख 3 टैब देखेंगे)। भी उत्पादन में <tab> रखा जाएगा

awk 'BEGIN{FS=OFS="\t"}{print $4,$5,$6}' file

प्रमुख स्थान / टैब के बिना उत्पादन होगा लेकिन अगर आपके पास 500 कॉलम हैं, तो आपको इसे लूप में करना होगा, या sub फंक्शंस का उपयोग करना होगा या उदाहरण के लिए कटौती, अन्य टूल पर विचार करें।


awk '{for (i=4; i<NF; i++) printf $i " "; print $NF}'