जैसा कि आप अपने प्रश्न में टिप्पणी करते हैं, awk
वास्तव में जाने का रास्ता है। उपयोग करने के लिए रिक्त स्थान को निचोड़नाcut
संभव है tr -s
, केव के उत्तर के रूप में ।
हालांकि मुझे भविष्य के पाठकों के लिए सभी संभावित संयोजनों के माध्यम से जाना चाहिए। स्पष्टीकरण परीक्षण अनुभाग में हैं।
tr | कट गया
tr -s ' ' < file | cut -d' ' -f4
awk
awk '{print $4}' file
दे घुमा के
while read -r _ _ _ myfield _
do
echo "forth field: $myfield"
done < file
sed
sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' file
टेस्ट
इस फ़ाइल को देखते हुए, आज्ञाओं का परीक्षण करें:
$ cat a
this is line 1 more text
this is line 2 more text
this is line 3 more text
this is line 4 more text
tr | कट गया
$ cut -d' ' -f4 a
is
# it does not show what we want!
$ tr -s ' ' < a | cut -d' ' -f4
1
2 # this makes it!
3
4
$
awk
$ awk '{print $4}' a
1
2
3
4
दे घुमा के
यह खेतों को क्रमिक रूप से पढ़ता है। उपयोग करके _
हम संकेत देते हैं कि यह इन क्षेत्रों को अनदेखा करने के लिए "जंक वैरिएबल" के रूप में एक फेंकने योग्य चर है। इस तरह, हम $myfield
फ़ाइल में 4 वें क्षेत्र के रूप में संग्रहीत करते हैं, कोई फर्क नहीं पड़ता कि उनके बीच के रिक्त स्थान हैं।
$ while read -r _ _ _ a _; do echo "4th field: $a"; done < a
4th field: 1
4th field: 2
4th field: 3
4th field: 4
sed
यह तीन समूहों को पकड़ता है और कोई रिक्त स्थान नहीं है ([^ ]*[ ]*){3}
। फिर, यह 4 क्षेत्र के रूप में एक स्थान तक आने वाले जो कुछ भी पकड़ता है, वह अंत में इसके साथ मुद्रित होता है \1
।
$ sed -r 's/^([^ ]*[ ]*){3}([^ ]*).*/\2/' a
1
2
3
4