Bash 打印文本文件的最后一行

Bash 打印文本文件的最后一行,bash,awk,Bash,Awk,我有这样一个文本文件: 1.2.3.t 1.2.4.t complete a=1.2.4.t b=complete 我需要打印最后一个非空行和最后两行作为两个变量。输出应为: 1.2.3.t 1.2.4.t complete a=1.2.4.t b=complete 我在最后一行中尝试了这个: b=awk'/./{line=$0}END{print line}'myfile 但我不知道该怎么办 1.2.3.t 1

我有这样一个文本文件:

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
我需要打印最后一个非空行和最后两行作为两个变量。输出应为:

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
我在最后一行中尝试了这个: b=
awk'/./{line=$0}END{print line}'myfile
但我不知道该怎么办

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
grep . file | tail -n 2 | sed 's/^ *//;1s/^/a=/;2s/^/b=/'
输出:

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
a=1.2.4.t b=complete a=1.2.4.t b=完成 输出:

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
a=1.2.4.t b=complete a=1.2.4.t b=完成
awk
救援

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
$ awk 'NF{a=b;b=$0} END{print "a="a;print "b="b}' file
a=1.2.4.t
b=complete
或者,如果您想使用实变量赋值

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
$ awk 'NF{a=b;b=$0} END{print a, b}' file 
  | read a b; echo "a="$a; echo "b="$b

a=1.2.4.t
b=complete

如果值中有反斜杠,则可能需要-r选项来读取。

awk
,以进行救援

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
$ awk 'NF{a=b;b=$0} END{print "a="a;print "b="b}' file
a=1.2.4.t
b=complete
或者,如果您想使用实变量赋值

    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete
$ awk 'NF{a=b;b=$0} END{print a, b}' file 
  | read a b; echo "a="$a; echo "b="$b

a=1.2.4.t
b=complete

如果值中有反斜杠,您可能需要-r选项来读取。

非常感谢您的回答。它起作用了。但我需要这两行作为变量。我的意思是,在这之后,我应该能够分别回显“$a”和$b。使用
read
将去掉前导和尾随空格,并解释转义序列。始终使用
IFS=read-r var
,除非您有特定原因不了解其影响。在这种情况下,您可能只需要执行类似于
arr=“$(awk'…')”
的操作。非常感谢您的回答。它起作用了。但我需要这两行作为变量。我的意思是,在这之后,我应该能够分别回显“$a”和$b。使用
read
将去掉前导和尾随空格,并解释转义序列。始终使用
IFS=read-r var
,除非您有特定原因不了解其影响。在这种情况下,您可能只需要执行类似于
arr=“$(awk'…')”
的操作即可。根据您要回答的注释,这不是您想要的输出;您希望将最后两行非空行分配给变量
a
b
;您希望将最后两行非空行分配给变量
a
b
    1.2.3.t
    1.2.4.t

    complete
 a=1.2.4.t
 b=complete