2014-01-09 81 views
0

當我這樣做:誰使用bash從文本文件中獲取/複製特定單詞?

LINE=$(head -38 fine.txt | tail -1 | cut -f2) 

我得到的文件的第38行,這就是:

Xres = 1098 

,但我只需要記錄1098作爲一個變量的值。

我正在接受培訓以閱讀文本文件並記錄值,並稍後在腳本中將它們用作參數。

+3

line38的全部內容是什麼? – Kent

+0

'LINE = $(head -38 fine.txt | tail -1)'看起來像什麼? 'cut'用於什麼?你可以通過調整'cut'的參數來得到你想要的。 – damienfrancois

+0

請考慮標記其中一個被接受的答案。在你這樣做之前,這個問題將繼續顯示爲未解決的問題。謝謝。 – tripleee

回答

0

| awk '{print $3}'添加到流水線。

+0

非常感謝! :d – Jorge

0
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 }'更確切地說:

awk -F '\t' 'NR==38 { split($2,f); print f[3]; exit 0 }' fine.txt 

選項-F '\t'設置選項卡,輸入字段分隔符。條件NR==38選擇第38行,而split($2,f)將空格上的第二個製表符分隔字段拆分爲數組f。然後我們只需打印fexit的第三個元素。

相關問題