2014-09-22 54 views
2

我想問一下如何從bash中的文件的最後部分獲取第n個值(例如第7個值)。如何從文件的最後/結尾部分獲取第n個值?

實施例:

The quick brown fox jumps over the lazy dog. 

利用上述線,我想只得到第七值(這是「棕色」)。

+0

DCC,_nothing_的問題或意見,從OP給出任何跡象表明他們的意思字符串。他們特別提到_file_,除非你能從OP得到確認,否則你不應該改變問題的性質。還原。而且,雖然我在給我的答案文本添加標籤時沒有問題,但是您做出了更多實質性更改(例如將sed命令稱爲標記,但它們顯然不是)使得答案沒有用處,所以我已經恢復我的回答也是,對不起。 – paxdiablo 2014-09-22 09:07:26

回答

0

你可以很容易地得到倒數第七個單詞。

一種方法是將文件作爲每行一個字符流,抓取該流的最後七行,然後抓取這七行的第一行。

例如,與輸入文件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行)。

+0

該命令很好用!不幸的是,由於時間限制,不能再接受答案。 – meme 2014-09-22 02:26:58

+0

@meme,在接受之前必須等待_minimum_時間,以確保您可以得到一個體面的,可以評估的答案:http://meta.stackexchange.com/questions/50697/time-limit-on-接受答案 - 我認爲這是15分鐘,但我傾向於等待幾天才接受我的問題的答案。 – paxdiablo 2014-09-22 02:36:32

2

如何:

S="The quick brown fox jumps over the lazy dog." 
echo $S | awk '{print $(NF-6)}' 
+0

可能不能確切的答案。 – 2014-09-22 06:22:20

1

你可以使用一個數組/分詞,以避免外部工具:

$ read -a temp <<< "The quick brown fox jumps over the lazy dog." 
$ echo "${temp[${#temp[@]}-7]}" 
brown 
1

使用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號

相關問題