टैब ने मूल्यों को जागृत कर दिया


90

मैं TAB अलग स्ट्रिंग से पहला कॉलम कैसे चुनूँ?

# echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -F'\t' '{print $1}'

उपरोक्त पूरी लाइन वापस कर देगा और न केवल "LOAD_SETTLED" जैसा कि अपेक्षित था।

अपडेट करें:

मुझे टैब अलग मूल्यों में तीसरे कॉलम को बदलने की आवश्यकता है। निम्नलिखित काम नहीं करता है।

echo $line | awk 'BEGIN { -v var="$mycol_new" FS = "[ \t]+" } ; { print $1 $2 var $4 $5 $6 $7 $8 $9 }' >> /pdump/temp.txt

हालाँकि यह अपेक्षा के अनुसार काम करता है यदि विभाजक टैब के बजाय अल्पविराम है।

echo $line | awk -v var="$mycol_new" -F'\t' '{print $1 "," $2 "," var "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "}' >> /pdump/temp.txt

4
awk 'BEGIN {FS = "[\ t] +"}; {प्रिंट $ 1} '# यह वही है जो मैं ढूंढ रहा था। क्या मेरी Google खोज सही है? :)
— शांतनुओ

3
इस टिप्पणी के लिए धन्यवाद, मुझे पता चला है: awk 'BEGIN {FS="\t"}; {print $1,FS,$2,FS,$3}' myFile.txtपहले तीन कॉलमों के टैब-सीमांकित मूल्यों को प्रिंट करने के लिए।
— वोक

6
या शायद बसawk 'BEGIN {OFS="\t"}; {print $1,$2,$3}'
— जोशिया योडर

3
जीएनयू और बीएसडी दोनों -vचर स्थापित करने के लिए समर्थन जगाते हैं । यह इनलाइन प्रोग्राम केBEGIN {FS="\t"} अंदर उपयोग करने के लिए बदसूरत है , और आपके द्वारा किए जाने वाले किसी भी खुले स्रोत के योगदान पर आपत्ति की संभावना है। केवल तभी करें यदि आप एक प्रोग्राम फ़ाइल लिख रहे हैं । इसके अलावा, इसका उपयोग करने के लिए हतोत्साहित किया जाता है क्योंकि उत्तरार्द्ध स्पष्ट करता है कि केवल सेट किया जा रहा है और नहीं । उस अंतिम बिंदु के बारे में भ्रम जो इस पोस्ट को पहले स्थान पर पहुंचाता है। इसलिए "अच्छी शैली" महत्वपूर्ण है। -F-v FS=FSOFS
— ब्रूनो ब्रोंस्की

1
कृपया, किसी को भी, कभी भी, क्या नहीं करना चाहिए आप अपने आउटपुट में [इनपुट] फील्ड सेपरेटर की गणना न करें। आप OFSचर के माध्यम से आउटपुट फ़ील्ड विभाजक निर्दिष्ट करते हैं।
— ब्रूनो ब्रोंस्की

जवाबों:


141

आपको OFSटैब बनने के लिए चर (आउटपुट फ़ील्ड सेपरेटर) सेट करने की आवश्यकता है :

echo "$line" | 
awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}'

(सुनिश्चित करें कि आप $lineइको स्टेटमेंट में वैरिएबल को उद्धृत करते हैं )


6
$ '\ T' में $ का उद्देश्य क्या है?
— अम्रत मुस्तफा

10
उन्नत बैश स्क्रिप्टिंग गाइड से मेरे अपने प्रश्न का उत्तर देते हुए: $ '...' उद्धृत स्ट्रिंग-विस्तार निर्माण एक तंत्र है जो बच गए ऑक्टल या हेक्स मूल्यों का उपयोग करता है ..., उदाहरण के लिए, उद्धरण = $ '\ 042'।
— अम्रत मुस्तफा

5
@AmrMostafa, गाइड एक भ्रामक व्याख्या एक प्रमुख को लगता है कि आप ऐसा नहीं है बहुत बुरा है कि $में $'\t'जरूरत नहीं है। ग्रेग की विकी बेहतर है: "इनमें से, $'...'सबसे आम है, और केवल सिंगल कोट्स की तरह काम करता है सिवाय इसके कि बैकस्लैश-एस्कैप्ड संयोजनों को एएनएसआई सी मानक द्वारा निर्दिष्ट के रूप में विस्तारित किया जाता है"।
— क्रिस्टियन सियुपिटु

9
अड़चन में, $'\t'जरूरी नहीं है। awk स्ट्रिंग "\t"को एक टैब कैरेक्टर समझता है
— ग्लेन जैकमैन

5
मुक्त स्रोत योगदानकर्ता, मैं आपसे विनती करता हूं, कृपया सामान जमा न करें awk -F $'\t' 'BEGIN {OFS = FS} …'। वह होना चाहिए awk -v FS='\t' -v OFS='\t' '…'। यह पांडित्यपूर्ण लग सकता है, लेकिन असंगत होने की संभावना बढ़ जाती है कि बाद में योगदानकर्ता बग का परिचय देगा क्योंकि वे आपके कोड को गलत समझते हैं।
— ब्रूनो ब्रोंस्की

21

सुनिश्चित करें कि वे वास्तव में टैब हैं! बैश में, आप एक टैब का उपयोग करके सम्मिलित कर सकते हैंC-v TAB

$ echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -F$'\t' '{print $1}'
LOAD_SETTLED


9

मैं BIND ज़ोन फ़ाइलों को हेरफेर करने के लिए FSऔर OFSचर का उपयोग करता हूं जो टैब सीमांकित हैं। यहाँ मेरी एक स्क्रिप्ट https://gist.github.com/RichardBronosky/abe1652c2d5c78c35b92ad02bdf0d0af#file-dns_update-sh-L36-L39 है

इसका मांस है:

awk -v FS='\t' -v OFS='\t' \
    -v record_type=$record_type \
    -v hostname=$hostname \
    -v ip_address=$ip_address '
$1==hostname && $3==record_type {$4=ip_address}
{print}
' $zone_file > $temp

यह ऐसा करने का एक साफ और आसान तरीका है।


5
echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -v var="test" 'BEGIN { FS = "[ \t]+" } ; { print $1 "\t" var "\t" $3 }'

0

क्या यह काम नहीं करना चाहिए?

echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk '{print $1}'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.