當我這樣做:誰使用bash從文本文件中獲取/複製特定單詞?
LINE=$(head -38 fine.txt | tail -1 | cut -f2)
我得到的文件的第38行,這就是:
Xres = 1098
,但我只需要記錄1098作爲一個變量的值。
我正在接受培訓以閱讀文本文件並記錄值,並稍後在腳本中將它們用作參數。
當我這樣做:誰使用bash從文本文件中獲取/複製特定單詞?
LINE=$(head -38 fine.txt | tail -1 | cut -f2)
我得到的文件的第38行,這就是:
Xres = 1098
,但我只需要記錄1098作爲一個變量的值。
我正在接受培訓以閱讀文本文件並記錄值,並稍後在腳本中將它們用作參數。
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
。然後我們只需打印f
和exit
的第三個元素。
line38的全部內容是什麼? – Kent
'LINE = $(head -38 fine.txt | tail -1)'看起來像什麼? 'cut'用於什麼?你可以通過調整'cut'的參數來得到你想要的。 – damienfrancois
請考慮標記其中一個被接受的答案。在你這樣做之前,這個問題將繼續顯示爲未解決的問題。謝謝。 – tripleee