我想問一下如何從bash中的文件的最後部分獲取第n個值(例如第7個值)。如何從文件的最後/結尾部分獲取第n個值?
實施例:
The quick brown fox jumps over the lazy dog.
利用上述線,我想只得到第七值(這是「棕色」)。
我想問一下如何從bash中的文件的最後部分獲取第n個值(例如第7個值)。如何從文件的最後/結尾部分獲取第n個值?
實施例:
The quick brown fox jumps over the lazy dog.
利用上述線,我想只得到第七值(這是「棕色」)。
你可以很容易地得到倒數第七個單詞。
一種方法是將文件作爲每行一個字符流,抓取該流的最後七行,然後抓取這七行的第一行。
例如,與輸入文件infile
:
The quick brown fox jumps
over the lazy dog.
可以使用下面的命令序列:
pax> sed 's/^ *//;s/ *$//;s/ */\n/g' qq.in | tail -7 | head -1
brown
的sed
具有三個命令到它(由分號分隔):
s/^ *//
;s/ *$/
;和s/ */\n/g
。前兩個命令是爲了確保行的開頭或結尾的空格不會導致無關的換行符。
然後tail
得到最後7行,並且head
得到那7箇中的第一個(即最後7行)。
如何:
S="The quick brown fox jumps over the lazy dog."
echo $S | awk '{print $(NF-6)}'
可能不能確切的答案。 – 2014-09-22 06:22:20
你可以使用一個數組/分詞,以避免外部工具:
$ read -a temp <<< "The quick brown fox jumps over the lazy dog."
$ echo "${temp[${#temp[@]}-7]}"
brown
使用tac
+ awk
另一種選擇:
$ cat infile
Query String: The quick brown
fox jumps over
the lazy dog.
$ tac infile |awk -v nword=7 '{for (i=NF;i>=1;i--){if(++a==nword){print $i;end}}}'
brown
tac
:將反轉行順序。
awk
:for循環巡迴領域從後到前,計數器停止在7號
DCC,_nothing_的問題或意見,從OP給出任何跡象表明他們的意思字符串。他們特別提到_file_,除非你能從OP得到確認,否則你不應該改變問題的性質。還原。而且,雖然我在給我的答案文本添加標籤時沒有問題,但是您做出了更多實質性更改(例如將sed命令稱爲標記,但它們顯然不是)使得答案沒有用處,所以我已經恢復我的回答也是,對不起。 – paxdiablo 2014-09-22 09:07:26