python的字典

认识字典:

字典是一系列键—值对

要思考什么样的数据集合,适合使用字典来存储。

可将任何Python对象用作字典中的值,包括但不限于数值,字符串,列表,字典。

在Python中,字典用放在花括号{}中的一系列键—值对表示。

my_dict = {key1:value1, key2:value2, ...}

要获取与键相关联的值,可依次指定字典名和放在方括号内的键

print(my_dict[key1])

添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。

my_dict[key3] = value3

修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值:

my_dict[key1] = new_value1

对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除:

del my_dict[key1]

遍历所有的键—值对:

for key, value in my_dict.items:
    print(key,value)

默认遍历键,所以:

for key in my_dict: 等效于 for key in my_dict.keys():

要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函
数sorted()来获得按特定顺序排列的键列表的副本:

for key in sorted(my_dict.keys()):

如果只希望获取字典包含的值,可使用方法values(),它返回一个值列表,而不包含任何键。

for value in my_dict.values():

为剔除重复项,可使用集合(set)集合类似于列表,但每个元素都必须是独一无二的:

for value in set(my_dict.values()):

将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。

一般来说,相同组织结构的字典集合,作为列表元素存储在一个列表中较为常见。

item_1 = {key1:value1_1, key2=value2_1, key3=value3_1}
item_2 = {key1:value1_2, key2=value2_2, key3=value3_2}
item_3 = {key1:value1_3, key2=value2_3, key3=value3_3}
my_list = [item1, item2, item3]

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。

也可以把字典存储到字典中。

嵌套应控制层级,构造代码时,应该把当前操作的作用域搞清楚。

python中的数值计算

以整数型为例

a = 4
b = 2
“+”代表两个整数相加
c = a + b
print(c)
6

“a-b”表示a减去b

“a*b”表示a乘以b

“a//b”表示a除以b的整数商

“a%b”表示a除以b的余数

“a**b”表示a的b次幂

其中“**”可以用来开方运算,方法是把b设置成要开的次幂,例如a=8,b=1/3,那么a**b表示把a开三次方

jetbrain破解服务器

访问如下网站

https://search.censys.io/

搜索如下内容

搜索框输入:services.http.response.headers.location: account.jetbrains.com/fls-auth

点击搜索,在返回的结果随便找一个点进去,查找到 HTTP/302

复制网址到 Jetbrains,选择许可证服务器/License server,粘贴刚刚复制的网址,激活

nginx伪静态try_files和rewrite

location ^~ /location {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
}

完整的解释是:try_files 去尝试到网站目录读取用户访问的文件,如果第一个变量存在,就直接返回;不存在继续读取第二个变量,如果存在,直接返回;不存在直接跳转到第三个参数上。变量就是每个uri资源。并不改变请求路径。 $uri表示文件资源, $uri/表示目录资源。

location ^~ /location {
    root /usr/share/nginx/html;
    index index.html index.htm;
    rewrite http://www.baidu.com break;
}

请求location,跳转至百度,改变请求路径。break表示不再向下匹配。

shell 判断文件夹或文件是否存在

文件夹不存在则创建

if [ ! -d "/data/" ];then
  mkdir /data
  else
  echo "文件夹已经存在"
fi

文件存在则删除

if [ ! -f "/data/filename" ];then
  echo "文件不存在"
  else
  rm -f /data/filename
fi

判断文件夹是否存在

if [ -d "/data/" ];then
  echo "文件夹存在"
  else
  echo "文件夹不存在"
fi

判断文件是否存在

if [ -f "/data/filename" ];then
  echo "文件存在"
  else
  echo "文件不存在"
fi

文件比较符

-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新  [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧  [ "/data/file1" -ot "/data/file2" ]

k8s更新镜像的简单脚本

用途:

当镜像实际发生改变,但是tag不变的情况下进行操作

updateimage.sh

#!/bin/env bash
kubectl set image -n demo deployments.apps/demo-deployment  demo=demo.host.com/demo/demo:latest
if [ $? -ne 0 ]; then
        echo "set image faild"
        exit 1
else
        echo "set image successed"
        kubectl rollout restart -n demo deployments.apps/demo-deployment
fi

一组基础的k8s模板

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: template-nginx
    release: template-nginx
  name: template-deployment
  namespace: template
spec:
  replicas: 1
  selector:
    matchLabels:
      app: template-nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      name: template-nginx
      namespace: template
      labels:
        app: template-nginx
        release: template-nginx
        releaseRevision: "v1"
    spec:
      containers:
        - name: template-nginx
          image: nginx:1.20-alpine
          imagePullPolicy: IfNotPresent
          ports:
          - name: template
            containerPort: 80
          volumeMounts:
          - name: template
            mountPath: /etc/nginx/conf.d/
      volumes:
          - name: template
            configMap:
              name: template

service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: template-nginx
    release: template-nginx
  name: template-nginx
  namespace: template
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: template-nginx
  type: ClusterIP

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: template-nginx
  namespace: template
  labels:
    ingress: template-nginx
    release: template-nginx
spec:
    rules:
      - host: temp.host.com
        http:
          paths:
            - path: /admin/
              backend: 
                service:
                  name: template-nginx
                  port:
                    number: 80
              pathType: Prefix
            - path: /
              backend:
                service:
                  name: template-nginx
                  port:
                    number: 80
              pathType: ImplementationSpecific

namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  labels:
    kubernetes.io/metadata.name: template
  name: template
spec:
  finalizers:
  - kubernetes

configmap.yaml

apiVersion: v1
data:
  default.conf: |+
    server {
        listen       80;
        listen  [::]:80;
        server_name  temp.host.com;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

kind: ConfigMap
metadata:
  name: template
  namespace: template

linux awk sed grep的用法

正则表达式基础知识

正则表达式:

是一套规则与方法,以行为基础工作单位

BRE(基本正则表达式)集合

元字符:^[].*$

作用:匹配字符,匹配位置,锚定位置

^:用于模式的最左侧,^start,表示以start开头的行
$:用于模式的最右行,end$,表示以end结尾的行
^$:用于表示空行
.:匹配任意一个且只有一个字符
*:匹配前一个字符,包含零次,可以理解为匹配所有内容
.*:匹配所有内容,除了空行
\:转义符,特殊符号需要保持字符串格式,需要转义
^.*:匹配任何字符开头(包括数量任意,内容任意,非空行)
.*$:匹配以任何字符结尾(包括数量任意,内容任意,非空行)
[]:匹配方括号内的内容,如[abc]表示匹配a或者b或者c,等价表达式[a-c],注:字母表中连续的字母序列或者连续的数字
[^]:取反,[^abc]匹配除了a、b、c之外的字符

ERD(扩展正则表达式)集合
使用grep -E生效
+:表示匹配前一个字符一次或者多次
[]+:表示匹配中括号中的内容一次或者多次
?:匹配前一个字符0次或者1次
|:“或”,表示同时匹配管道符前后的内容
():分组过滤,表示将()中的内容作为一个整体
a{n,m}:表示匹配a最少n次,最大m次
a{n,}:表示匹配a最少n次
a{n}:表示匹配a正好n次
a{,m}:表示匹配a最大m次

简述三剑客的作用

awk擅长取列;

sed擅长取行和替换;

grep擅长查找功能,比如可以根据关键字查询对应的日志。

三剑客使用介绍

grep是从文本文件或者数据流匹配文本行或者数据

grep [选项] 查找内容 [源文件]
观察其组成结构,由四部分组成:指令名(grep)、选项、查找内容、源文件,其中需要注意的有两个位置,下面让我们徐徐道来。

源文件
源文件部分是可有可无的,若不指定任何文件名称或是所给予的文件名为-,则grep指令会从标准输入设备读取数据,其使用如下所示:

// 文件路径为/test

// 接收cat的输入
cat ./test |grep 'hello'

// 存在路径部分参数
grep 'hello' ./test
选项部分
选项部分比较多,可以通过grep --help指令来看一下有哪些选项:

Regexp selection and interpretation: // 正则表达式选择和解释
-E, --extended-regexp PATTERN is an extended regular expression (ERE)
-F, --fixed-strings PATTERN is a set of newline-separated strings
-G, --basic-regexp PATTERN is a basic regular expression (BRE)
-P, --perl-regexp PATTERN is a Perl regular expression
-e, --regexp=PATTERN use PATTERN for matching
-f, --file=FILE obtain PATTERN from FILE
-i, --ignore-case ignore case distinctions
-w, --word-regexp force PATTERN to match only whole words
-x, --line-regexp force PATTERN to match only whole lines
-z, --null-data a data line ends in 0 byte, not newline

Miscellaneous: // 各种各样的
-s, --no-messages suppress error messages
-v, --invert-match select non-matching lines // 搜索不匹配的行
-V, --version display version information and exit
--help display this help text and exit

Output control: // 输出控制
-m, --max-count=NUM stop after NUM matches
-b, --byte-offset print the byte offset with output lines
-n, --line-number print line number with output lines
--line-buffered flush output on every line
-H, --with-filename print the file name for each match
-h, --no-filename suppress the file name prefix on output
--label=LABEL use LABEL as the standard input file name prefix
-o, --only-matching show only the part of a line matching PATTERN
-q, --quiet, --silent suppress all normal output
--binary-files=TYPE assume that binary files are TYPE;
TYPE is 'binary', 'text', or 'without-match'
-a, --text equivalent to --binary-files=text
-I equivalent to --binary-files=without-match
-d, --directories=ACTION how to handle directories;
ACTION is 'read', 'recurse', or 'skip'
-D, --devices=ACTION how to handle devices, FIFOs and sockets;
ACTION is 'read' or 'skip'
-r, --recursive like --directories=recurse
-R, --dereference-recursive likewise, but follow all symlinks
--include=FILE_PATTERN search only files that match FILE_PATTERN
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
-L, --files-without-match print only names of FILEs containing no match
-l, --files-with-matches print only names of FILEs containing matches
-c, --count print only a count of matching lines per FILE
-T, --initial-tab make tabs line up (if needed)
-Z, --null print 0 byte after FILE name

Context control: // 上下文控制
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context
-NUM same as --context=NUM
--color[=WHEN],
--colour[=WHEN] use markers to highlight the matching strings;
WHEN is 'always', 'never', or 'auto'
-U, --binary do not strip CR characters at EOL (MSDOS/Windows)
-u, --unix-byte-offsets report offsets as if CRs were not there
看着选项内容真的很多,背起来着实不易,幸好文档中给我们做了分类,只需要记住这些分类是干什么的,然后在需要的时候从里面进行搜索即可快速搜寻到所需用法(感觉看其内容比看菜鸟教程上的内容容易很多)

(1)当需要通过正则的方式进行搜索内容时,去"Regexp selection and interpretation"区块找选项即可,常用的有:

-E:通过正则表达式进行搜索
(2)当需要对输出的内容进行控制时,去"Output control"区块找选项即可,常用的有如下几个:

-m 数量:表征匹配多少次就会停止
-n:显示匹配行及行号
-H:打印每一个匹配的文件名
-r:能够递归查询,即可以输入文件夹查询
-c:统计匹配到行的个数
(3)当需要获取输出内容的上下文进行操纵时,去"Context control"区块找选项即可,常用的有如下几个:

-B 数量、-A 数量、-C 数量:分别表征获取内容前、后、前后几行
--color:对输出的内容添加颜色
(4)除了一些划分比较理解的选项,还有一些选项我个人认为划分的并不是很合理,但是它们仍然很重要,让我们一起来看看有哪些:

-i:忽略字母大小写
-v:反向选择,也就是显示出没有搜索出字符串内容的那一行
二、经典用法
上面已经将其基本使用做了详细的阐述,俗话说的好:光说不练假把式,光练不说真把式,连说带练全把式。既然上面阐述了一通理论的东西,下面我们就来实战几个常用场景,将理论付诸于实践。在实战之前先创建一个文件,文件名是test,文件内容如下所示:

hello world!!!
dog
cat
pig
big pig
tiger
Elephant
从确定文件中过滤出包含pig的

$ grep 'pig' ./test
pig
big pig
从包含某一部分内容的文件中过滤包含pig的

$ grep 'pig' ./te*
pig
big pig
从某一文件夹下所有内容中过滤出包含pig的

$ grep -r 'pig' .
./test:pig
./test:big pig
从某一文件中过滤出不包含pig的

$ grep -v 'pig' ./test
hello world!!!
dog
cat
tiger
Elephant
在过滤文件时显示行数

$ grep -n 'pig' ./test
4:pig
5:big pig
匹配出以开头的内容(通过基本正则表达式匹配即可,基本正则表达式字符有^$.[]*)

$ grep ^p ./test
pig
匹配出包含pig或cat内容的行(用到了扩展正则表达式,其在基本正则表达式基础上增加了(){}?+|等)

$ grep -E 'pig|cat' ./test
cat
pig
big pig
匹配出包含hello和world内容的行

$ grep 'hello' ./test |grep 'world'
hello world!!!
获取到匹配内容‘big pig'的前一行内容

$ grep -B1 'big pig' ./test
pig
big pig
获取匹配到'pig'行的数量

$ grep -c 'pig' ./test
获取到的pig行的内容高亮显示

$ grep --color 'pig' ./test
pig
big pig

sed是一个流编辑器

一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

sed --help
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
      --debug
                 annotate program execution
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be executed
  --follow-symlinks
                 follow symlinks when processing in place
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
  -l N, --line-length=N
                 specify the desired line-wrap length for the `l' command
  --posix
                 disable all GNU extensions.
  -E, -r, --regexp-extended
                 use extended regular expressions in the script
                 (for portability use POSIX -E).
  -s, --separate
                 consider files as separate rather than as a single,
                 continuous long stream.
      --sandbox
                 operate in sandbox mode (disable e/r/w commands).
  -u, --unbuffered
                 load minimal amounts of data from the input files and flush
                 the output buffers more often
  -z, --null-data
                 separate lines by NUL characters
      --help     display this help and exit
      --version  output version information and exit

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret.  All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!

sed匹配范围:
空地址:全文匹配,即逐行操作
单地址:指定行匹配
/.../:被模式匹配的每一行
区间范围:10,20是第十行到第二十行;10,+5,表示第十行向下五行;/.../,/.../也可多个模式一起结合匹配。
步长:1~2,表示从1开始,步长为2

实现功能:
1.提取,打印:
sed -n '匹配模式p' 文件名,如sed -n '1,2p' passwd.txt,显示第一至第二行。
2.过滤
sed -n '匹配模式p' 文件名,如sed -n '/^system/p' passwd.txt,显示已system开头的行

awk是一个处理文本的编程语言工具

能用简短的程序处理标准输入、文件、数据排序、计算以及生成报表等。

也是按行处理,默认分隔符是“ ”

awk基本命令

 awk -h
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:          GNU long options: (standard)
        -f progfile             --file=progfile
        -F fs                   --field-separator=fs
        -v var=val              --assign=var=val
Short options:          GNU long options: (extensions)
        -b                      --characters-as-bytes
        -c                      --traditional
        -C                      --copyright
        -d[file]                --dump-variables[=file]
        -D[file]                --debug[=file]
        -e 'program-text'       --source='program-text'
        -E file                 --exec=file
        -g                      --gen-pot
        -h                      --help
        -i includefile          --include=includefile
        -l library              --load=library
        -L[fatal|invalid]       --lint[=fatal|invalid]
        -M                      --bignum
        -N                      --use-lc-numeric
        -n                      --non-decimal-data
        -o[file]                --pretty-print[=file]
        -O                      --optimize
        -p[file]                --profile[=file]
        -P                      --posix
        -r                      --re-interval
        -S                      --sandbox
        -t                      --lint-old
        -V                      --version

To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.

gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.

Examples:
        gawk '{ sum += $1 }; END { print sum }' file
        gawk -F: '{ print $1 }' /etc/passwd
$0 代表一整行数据
$1代表第一列
$NF代表最后一列,$(NF-1)倒数第二列

linux tee的用法

tee命令用于将标准输入复制到每个指定文件,并显示到标准输出。tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

  • 基本参数
tee --help

Usage: tee [OPTION]... [FILE]...
Copy standard input to each FILE, and also to standard output.

  -a, --append              append to the given FILEs, do not overwrite
  -i, --ignore-interrupts   ignore interrupt signals
  -p                        diagnose errors writing to non pipes
      --output-error[=MODE]   set behavior on write error.  See MODE below
      --help     display this help and exit
      --version  output version information and exit

MODE determines behavior with write errors on the outputs:
  'warn'         diagnose errors writing to any output
  'warn-nopipe'  diagnose errors writing to any output not a pipe
  'exit'         exit on error writing to any output
  'exit-nopipe'  exit on error writing to any output not a pipe
The default MODE for the -p option is 'warn-nopipe'.
The default operation when --output-error is not specified, is to
exit immediately on error writing to a pipe, and diagnose errors
writing to non pipe outputs.
  • 将屏幕输出同时输出到文件:
ping www.baidu.com | tee pingbaidu.log
PING www.wshifen.com (103.235.46.40) 56(84) bytes of data.
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=1 ttl=55 time=3.79 ms
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=2 ttl=55 time=3.87 ms
......
cat pingbaidu.com
PING www.wshifen.com (103.235.46.40) 56(84) bytes of data.
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=1 ttl=55 time=3.79 ms
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=2 ttl=55 time=3.87 ms
......
  • 追加到输出文件
ping www.sina.com | tee -a pingbaidu.log
PING ww1.sinaimg.cn.w.alikunlun.com (47.246.16.231) 56(84) bytes of data.
64 bytes from 47.246.16.231 (47.246.16.231): icmp_seq=1 ttl=57 time=2.15 ms
64 bytes from 47.246.16.231 (47.246.16.231): icmp_seq=2 ttl=57 time=5.42 ms
......
cat pingbaidu.log  
PING www.wshifen.com (103.235.46.40) 56(84) bytes of data.
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=1 ttl=55 time=3.79 ms
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=2 ttl=55 time=3.87 ms
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=3 ttl=55 time=4.62 ms
64 bytes from 103.235.46.40 (103.235.46.40): icmp_seq=4 ttl=55 time=3.77 ms
PING ww1.sinaimg.cn.w.alikunlun.com (47.246.16.231) 56(84) bytes of data.
64 bytes from 47.246.16.231 (47.246.16.231): icmp_seq=1 ttl=57 time=2.15 ms
64 bytes from 47.246.16.231 (47.246.16.231): icmp_seq=2 ttl=57 time=5.42 ms
64 bytes from 47.246.16.231 (47.246.16.231): icmp_seq=3 ttl=57 time=2.16 ms
......
  • 将内容输出到多个文件,我们直接在tee命令后面直接添加对应的文件
ping www.baidu.com | tee pingbaidu.log ping.log
PING www.wshifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172: icmp_seq=1 ttl=46 time=21.2 ms
64 bytes from 183.232.231.172: icmp_seq=2 ttl=46 time=19.4 ms
64 bytes from 183.232.231.172: icmp_seq=3 ttl=46 time=19.4 ms
64 bytes from 183.232.231.172: icmp_seq=4 ttl=46 time=20.5 ms
......

cat pingbaidu.log 
PING www.wshifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172: icmp_seq=1 ttl=46 time=21.2 ms
64 bytes from 183.232.231.172: icmp_seq=2 ttl=46 time=19.4 ms
64 bytes from 183.232.231.172: icmp_seq=3 ttl=46 time=19.4 ms
64 bytes from 183.232.231.172: icmp_seq=4 ttl=46 time=20.5 ms
......

cat ping.log 
ING www.wshifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172: icmp_seq=1 ttl=46 time=21.2 ms
64 bytes from 183.232.231.172: icmp_seq=2 ttl=46 time=19.4 ms
64 bytes from 183.232.231.172: icmp_seq=3 ttl=46 time=19.4 ms
64 bytes from 183.232.231.172: icmp_seq=4 ttl=46 time=20.5 ms
  • 忽略中断事件,这个时候我们可以使用-i参数
$ ping www.baidu.com | tee -i pingbaidu.log ping.log
PING www.wshifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172: icmp_seq=1 ttl=46 time=20.4 ms
64 bytes from 183.232.231.172: icmp_seq=2 ttl=46 time=19.6 ms
64 bytes from 183.232.231.172: icmp_seq=3 ttl=46 time=19.9 ms
64 bytes from 183.232.231.172: icmp_seq=4 ttl=46 time=19.3 ms
^C
--- www.wshifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 19.311/19.842/20.465/0.450 ms

......

cat pingbaidu.log 
PING www.wshifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172: icmp_seq=1 ttl=46 time=20.4 ms
64 bytes from 183.232.231.172: icmp_seq=2 ttl=46 time=19.6 ms
64 bytes from 183.232.231.172: icmp_seq=3 ttl=46 time=19.9 ms
64 bytes from 183.232.231.172: icmp_seq=4 ttl=46 time=19.3 ms

--- www.wshifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 19.311/19.842/20.465/0.450 ms