如何从wget命令输出中提取最后一行?

时间:2014-02-17 11:54:32

标签: linux bash wget

FTP服务器主机DRLAncillary_2014-01-25.tgz上的远程目录CompressedArchivedAncillary下不存在

is.sci.gsfc.nasa.gov文件。

如果我使用带有--spider选项的wget命令来确定它的存在,则在终端窗口上显示以下输出行并流水线化到输出文件 /tmp/fileinfo.txt

wget --output-document=/dev/null --spider ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-25.tgz 2>&1 | tee /tmp/fileinfo.txt

==================================================================================
--2014-02-17 18:20:25--  ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-25.tgz
           => “/dev/null”
Resolving is.sci.gsfc.nasa.gov... 169.154.128.59
Connecting to is.sci.gsfc.nasa.gov|169.154.128.59|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /CompressedArchivedAncillary ... done.
==> SIZE DRLAncillary_2014-01-25.tgz ... done.
==> PASV ... done.    --2014-02-17 18:20:29--  ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-25.tgz
           => “.listing”
==> CWD (1) /CompressedArchivedAncillary ... done.
==> PASV ... done.    ==> LIST ... done.

     0K .......... .......... .......... ...                   35.6K=0.9s

Removed “.listing”.

No such file “DRLAncillary_2014-01-25.tgz”.

=============================================== ===================================

DRLAncillary_2014-01-15.tgz文件确实存在于FTP服务器主机CompressedArchivedAncillary上的远程目录is.sci.gsfc.nasa.gov下。

如果我使用带有--spider选项的wget命令来确定它的存在,则在终端窗口上显示以下输出行并流水线化到输出文件 /tmp/fileinfo.txt

wget --output-document=/dev/null --spider ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-15.tgz 2>&1 | tee /tmp/fileinfo.txt

==================================================================================
--2014-02-17 18:22:18--  ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-15.tgz
           => “/dev/null”
Resolving is.sci.gsfc.nasa.gov... 169.154.128.59
Connecting to is.sci.gsfc.nasa.gov|169.154.128.59|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /CompressedArchivedAncillary ... done.
==> SIZE DRLAncillary_2014-01-15.tgz ... 1811109782
==> PASV ... done.    --2014-02-17 18:22:21--  ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-15.tgz
           => “.listing”
==> CWD (1) /CompressedArchivedAncillary ... done.
==> PASV ... done.    ==> LIST ... done.

     0K .......... .......... .......... ...                   42.0K=0.8s

Removed “.listing”.

File “DRLAncillary_2014-01-15.tgz” exists.
==================================================================================

带有 - spider 选项的wget命令可以获取我想要的消息,并将它们存储到特定文件中。正如您从上面列出的两段中看到的那样,它们在顶部和底部分隔,并形成连续的等号线:

当搜索文件不存在时,输出的最后一行是 File “DRLAncillary_2014-01-15.tgz” exists

当搜索确实存在时,输出的最后一行读取 No such file “DRLAncillary_2014-01-25.tgz”.

=============================================== ===================================

所以我的问题是:

  1. 如何将wget输出重定向(使用管道运算符) 一个或多个支持过滤器的命令,如sed,grep,xargs,awk, tail等等,只从流中提取最后一行 缓冲区,而不是先将输出存储在固定文件中,然后 从该文件中读取最后一行?而且,我希望 提取的字符串将保存在变量中,我不指望 屏幕相当/清晰,而不是回应任何消息。

  2. 目前,我可以使用以下复合命令来获取 输出文件/tmp/fileinfo.txt中的最后一行: tail -2 /tmp/fileinfo.txt |头-1 -

    虽然这不是我理想的简单文件存在检查解决方案,如果你的bash脚本大师们可以帮我做一些修改我的wget命令行来回显终端窗口打印,我可以用它

  3. 提前谢谢!

3 个答案:

答案 0 :(得分:1)

抱歉,我不知道我是否理解了这个问题..但你试过了吗?

wget ... | awk '/^File/ {print}; /No such/ {print}';

root@stormtrooper:~# wget --output-document=/dev/null --spider ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-25.tgz 2>&1 | awk '/^File/ {print}; /^No such/{print}'
No such file ‘DRLAncillary_2014-01-25.tgz’.
root@stormtrooper:~# wget --output-document=/dev/null --spider ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-15.tgz 2>&1  | awk '/^File/ {print}; /^No such/{print}'
File ‘DRLAncillary_2014-01-15.tgz’ exists.

抱歉英语不好

答案 1 :(得分:0)

如果不通过文件,您是否只能通过headtail进行管道传输:

wget --output-document=/dev/null --spider ftp://is.sci.gsfc.nasa.gov/CompressedArchivedAncillary/DRLAncillary_2014-01-15.tgz 2>&1 | tail -2 | head -1

答案 2 :(得分:0)

  

我如何将wget输出重命名(使用管道操作符)一个或多个启用过滤器的命令,如sed,grep,xargs,awk,tail等,以从流缓冲区中仅提取最后一行,而不先将输出存储在固定文件中,然后从该文件中读取最后一行?此外,我希望提取的字符串将保存在一个变量中,我不希望屏幕完全/清晰,而不是回显任何消息。

 LAST_LINE=$(wget -O- http://URL 2> /dev/null | tail -1)