[英]Who to get/copy a specific word from a text file using bash?
當我這樣做時:
LINE=$(head -38 fine.txt | tail -1 | cut -f2)
我得到文件的第38行,即:
Xres = 1098
但我只需要將1098記錄為變量的值。
我正在訓練中讀取文本文件並記錄值,並在稍后的腳本中將它們用作參數。
新增| awk '{print $3}'
| awk '{print $3}'
到管道。
sed -n '38s/.*= *//p' fine.txt
缺省情況下, sed
打印每行輸入。 -n
選項禁用此行為。 38
選擇行號38,當看到此行時,替換項將所有內容替換為最后一個等號,然后不進行打印。
假設第二個字段是最后一個字段。 如果輸入行比我想象的要復雜,請嘗試替換s/^[^\\t]*\\t[^\\t]*= *//p
。 如果您的sed
無法識別\\t
為制表符,則需要提供文字制表符(您可以在某些shell中使用鍵序列ctrl-v制表符輸入一個)。
如果輸入文件很大,則可能需要重構sed
腳本以在第38行之后退出。
總結,這讓我們
LINE=$(sed -n '38!b;s/^[^\t]*\t[^\t]*= *//p;q' fine.txt)
然而,這變得有點復雜,以至於妨礙了易讀性和可維護性。 Awk中的內容更易讀;
awk -F '\t' 'NR==38 { sub(/.*= */,"",$2); print $2; exit 0 }' fine.txt
更一般而言,您可能想在制表符上分割,然后在空格上分割。 以下實現cut -f2 | awk '{ print $3 }'
cut -f2 | awk '{ print $3 }'
更准確地說:
awk -F '\t' 'NR==38 { split($2,f); print f[3]; exit 0 }' fine.txt
選項-F '\\t'
將制表符設置為輸入字段分隔符。 條件NR==38
選擇第38行, split($2,f)
將空格上的第二個制表符分隔的字段拆分為數組f
。 然后我們簡單地打印f
的第三個元素,然后exit
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.