FTPサイトをテストするための次の小さなスクリプトがあります。
#!/bin/bash
wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
grep '\([0-9.]\+ [M]B/s\)' >> wget300.log
表示される出力は次のとおりです。
2018-07-26 22:30:06 (22.7 MB/s) - '/dev/null' saved [104857600]
さて、今私は次のことをしたいと思います:
2018-07-26 22:30:06 22.7
誰でも助けることができますか?awk
orを使用する必要があるようですsed
。
答え1
使用awk
:
$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
awk '/[0-9]+ [M]B\/s/{ sub("\\(",""); print $1,$2,$3 }' >> wget300.log
これにより、正規表現パターンを検索するgrep
必要がなくなります。速度の前のものをawk
削除してから、列1、2、3(日付、時間、速度)を印刷します。(
答え2
使用する代替方法は次のとおりですsed
。
$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
sed 's/(//;s/ [[:alpha:]]\+\/s.*$//' >> wget300.log
仕組み:
s/(//;
- 最初のブラケットの取り外しs/ [[:alpha:]]\+\/s.*$//
- space+ 'MB / s'から最後まですべて削除します.*$
。
それを使用する別の方法perl
:
$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
perl -lne 'print "$1 $2" if /^(.*)\s\((\S+)/' >> wget300.og
仕組み:
- Perl括弧で囲まれた内容はすべて保存されるため、変数も
$1
保存$2
されます。この場合、2番目の変数では、space+かっこの前のすべての項目(+括弧を除く)と開き、括弧の後の$1
すべての項目(スペースを除く)と一致します。\S+
$2