簡體   English   中英

誰可以使用bash從文本文件中獲取/復制特定單詞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM