如何从文件的最后/结尾部分获取第n个值?

时间:2014-09-22 02:16:35

标签: regex bash

我想问一下如何从bash文件的最后一部分获取第n个值(例如第7个)。

示例:

   The quick brown fox jumps over the lazy dog.

通过以上这一行,我想得到的只有第7个值("棕色")。

4 个答案:

答案 0 :(得分:2)

怎么样:

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

答案 1 :(得分:1)

您可以使用数组/单词拆分来避免使用外部工具:

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

答案 2 :(得分: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位。

答案 3 :(得分: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然后得到最后七行,head得到这七行中的第一行(即第七行的第一行)。